From 1114049f32c8c9e35cce014c3bf6dd2568f3cc5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabrice=20PENHO=C3=8BT?= Date: Mon, 1 Mar 2021 13:02:07 +0100 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20de=20NPM=20+=20des=20d?= =?UTF-8?q?=C3=A9pendances=20backend=20et=20frontend?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- front/package-lock.json | 11134 ++++++++++++++++-- front/package.json | 7 +- front/public/JS/accountUser.app.js | 658 +- front/public/JS/connection.app.js | 365 +- front/public/JS/deconnection.app.js | 93 +- front/public/JS/deleteValidation.app.js | 304 +- front/public/JS/group.app.js | 411 +- front/public/JS/groupElement.app.js | 358 +- front/public/JS/homeManager.app.js | 440 +- front/public/JS/homeUser.app.js | 702 +- front/public/JS/index.app.js | 236 +- front/public/JS/loginLink.app.js | 348 +- front/public/JS/manageGroups.app.js | 548 +- front/public/JS/manageQuestionnaires.app.js | 973 +- front/public/JS/manageUsers.app.js | 818 +- front/public/JS/newLoginValidation.app.js | 312 +- front/public/JS/paymentPage.app.js | 303 +- front/public/JS/polyfill.app.js | 1511 +-- front/public/JS/questionnaire.app.js | 409 +- front/public/JS/subscribe.app.js | 365 +- front/public/JS/subscribeValidation.app.js | 574 +- front/public/JS/unsubscribe.app.js | 286 +- package-lock.json | 5909 +++++++++- package.json | 6 +- 24 files changed, 19509 insertions(+), 7561 deletions(-) diff --git a/front/package-lock.json b/front/package-lock.json index 89a559b..1e21dc8 100644 --- a/front/package-lock.json +++ b/front/package-lock.json @@ -1,267 +1,8695 @@ { "name": "wikilerni", "version": "0.2.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" + "packages": { + "": { + "name": "wikilerni", + "version": "0.2.0", + "license": "GPL-3.0-or-later", + "devDependencies": { + "@babel/core": "^7.13.8", + "@babel/preset-env": "^7.13.8", + "babel-loader": "^8.2.2", + "babel-polyfill": "^6.26.0", + "webpack": "^4.46.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.2" } }, - "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.8.tgz", + "integrity": "sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog==", "dev": true }, - "@babel/core": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", - "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", + "node_modules/@babel/core": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.8.tgz", + "integrity": "sha512-oYapIySGw1zGhEFRd6lzWNLWFX2s5dA/jm+Pw/+59ZdXtjyIuwlXbrId22Md0rgZVop+aVoqow2riXhBLNyuQg==", "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.10", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.0", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helpers": "^7.13.0", + "@babel/parser": "^7.13.4", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", "lodash": "^4.17.19", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.0.tgz", + "integrity": "sha512-zBZfgvBB/ywjx0Rgc2+BwoH/3H+lDtlgD4hBOpEv5LxRnYsm/753iRuLepqnYlynpjC3AdQxtxsoeHJoEEwOAw==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.8.tgz", + "integrity": "sha512-pBljUGC1y3xKLn1nrx2eAhurLMA8OqBtBP/JwG4U8skN7kf8/aqwwxpV1N6T0e7r6+7uNitIa/fUxPFagSXp3A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.8.tgz", + "integrity": "sha512-qioaRrKHQbn4hkRKDHbnuQ6kAxmmOF+kzKGnIfxPK4j2rckSJCpKzr/SSTlohSCiE3uAQpNDJ9FIh4baeE8W+w==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.4.tgz", + "integrity": "sha512-K5V2GaQZ1gpB+FTXM4AFVG2p1zzhm67n9wrQCJYNzvuLzQybhJyftW7qeDd2uUxPDNdl5Rkon1rOAeUeNDZ28Q==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", + "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", + "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", + "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", + "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", + "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.1" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.0.tgz", + "integrity": "sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz", + "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.13.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.4.tgz", + "integrity": "sha512-uvoOulWHhI+0+1f9L4BoozY7U5cIkZ9PgJqvb041d6vypgUmtVPG4vmGm4pSggjl8BELzvHyUeJSUyEMY6b+qA==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", + "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.8.tgz", + "integrity": "sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", + "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", + "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", + "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", + "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", + "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.8.tgz", + "integrity": "sha512-Sso1xOpV4S3ofnxW2DsWTE5ziRk62jEAKLGuQ+EJHC+YHTbFG38QUTixO3JVa1cYET9gkJhO1pMu+/+2dDhKvw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-proposal-async-generator-functions": "^7.13.8", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-dynamic-import": "^7.13.8", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.13.8", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.8", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.13.0", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.1.4", + "babel-plugin-polyfill-corejs3": "^0.1.3", + "babel-plugin-polyfill-regenerator": "^0.1.2", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.8.tgz", + "integrity": "sha512-CwQljpw6qSayc0fRG1soxHAKs1CnQMOChm4mlQP6My0kf9upVGizj/KhlTTgyUnETmHpcUXjaluNAkteRFuafg==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz", + "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.0", + "@babel/types": "^7.13.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/types": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", + "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true, + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.8.tgz", + "integrity": "sha512-kB5/xNR9GYDuRmVlL9EGfdKBSUVI/9xAU7PCahA/1hbC2Jbmks9dlBBYjHF9IHMNY2jV/G2lIG7z0tJIW27Rog==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.0", + "@babel/helper-define-polyfill-provider": "^0.1.4", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.6.tgz", + "integrity": "sha512-IkYhCxPrjrUWigEmkMDXYzM5iblzKCdCD8cZrSAkQOyhhJm26DcG+Mxbx13QT//Olkpkg/AlRdT2L+Ww4Ciphw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.1.4", + "core-js-compat": "^3.8.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.5.tgz", + "integrity": "sha512-EyhBA6uN94W97lR7ecQVTvH9F5tIIdEw3ZqHuU4zekMlW82k5cXNXniiB7PRxQm06BqAjVr4sDT1mOy4RcphIA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.1.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, + "dependencies": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001192", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001192.tgz", + "integrity": "sha512-63OrUnwJj5T1rUmoyqYTdRWBqFFxZFlyZnRRjDR8NSUQFB6A+j/uBORU/SyJ5WzDLg4SPiZH40hQCBNdZ/jmAw==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz", + "integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.675", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.675.tgz", + "integrity": "sha512-GEQw+6dNWjueXGkGfjgm7dAMtXfEqrfDG3uWcZdeaD4cZ3dKYdPRQVruVXQRXtPLtOr5GNVVlNLRMChOZ611pQ==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "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" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/import-local/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/loglevel": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "dependencies": { + "mime-db": "1.46.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "optional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.7.tgz", + "integrity": "sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-dir/node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-dir/node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz", + "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==", + "dev": true, + "dependencies": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.4.7" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/terser-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "peerDependencies": { + "webpack": "4.x.x" + } + }, + "node_modules/webpack-cli/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz", + "integrity": "sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ==", + "dev": true, + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, "requires": { - "@babel/types": "^7.12.11", + "@babel/highlight": "^7.12.13" + } + }, + "@babel/compat-data": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.8.tgz", + "integrity": "sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog==", + "dev": true + }, + "@babel/core": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.8.tgz", + "integrity": "sha512-oYapIySGw1zGhEFRd6lzWNLWFX2s5dA/jm+Pw/+59ZdXtjyIuwlXbrId22Md0rgZVop+aVoqow2riXhBLNyuQg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.0", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helpers": "^7.13.0", + "@babel/parser": "^7.13.4", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "semver": "^6.3.0", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.0.tgz", + "integrity": "sha512-zBZfgvBB/ywjx0Rgc2+BwoH/3H+lDtlgD4hBOpEv5LxRnYsm/753iRuLepqnYlynpjC3AdQxtxsoeHJoEEwOAw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", - "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.12.13" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" } }, "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.8.tgz", + "integrity": "sha512-pBljUGC1y3xKLn1nrx2eAhurLMA8OqBtBP/JwG4U8skN7kf8/aqwwxpV1N6T0e7r6+7uNitIa/fUxPFagSXp3A==", "dev": true, "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", + "@babel/compat-data": "^7.13.8", + "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", - "semver": "^5.5.0" + "semver": "^6.3.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.8.tgz", + "integrity": "sha512-qioaRrKHQbn4hkRKDHbnuQ6kAxmmOF+kzKGnIfxPK4j2rckSJCpKzr/SSTlohSCiE3uAQpNDJ9FIh4baeE8W+w==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.12.13", "regexpu-core": "^4.7.1" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "@babel/helper-define-polyfill-provider": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.4.tgz", + "integrity": "sha512-K5V2GaQZ1gpB+FTXM4AFVG2p1zzhm67n9wrQCJYNzvuLzQybhJyftW7qeDd2uUxPDNdl5Rkon1rOAeUeNDZ28Q==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.13.0" } }, "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" } }, "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.12.13" } }, "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", + "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.0.tgz", + "integrity": "sha512-yvRf8Ivk62JwisqV1rFRMxiSMDGnN6KH1/mDMmIrij4jztpQNRoHqqMG3U6apYbGRPJpgPalhva9Yd06HlUxJQ==", "dev": true, "requires": { - "@babel/types": "^7.12.7" + "@babel/types": "^7.13.0" } }, "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz", + "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==", "dev": true, "requires": { - "@babel/types": "^7.12.5" + "@babel/types": "^7.12.13" } }, "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz", + "integrity": "sha512-Ls8/VBwH577+pw7Ku1QkUWIyRRNHpYlts7+qSqBBFCW3I8QteB9DxfcZ5YJpOwH6Ihe/wn8ch7fMGOP1OhEIvw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0", "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", "dev": true, "requires": { - "@babel/types": "^7.12.10" + "@babel/types": "^7.12.13" } }, "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" } }, "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.0.tgz", + "integrity": "sha512-Segd5me1+Pz+rmN/NFBOplMbZG3SqRJOBlY+mA0SxAv6rjj7zJqr1AVr3SfzUVTLCv7ZLU5FycOM/SBGuLPbZw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz", + "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.12.13" } }, "@babel/helper-skip-transparent-expression-wrappers": { @@ -274,12 +8702,12 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, "requires": { - "@babel/types": "^7.12.11" + "@babel/types": "^7.12.13" } }, "@babel/helper-validator-identifier": { @@ -289,182 +8717,184 @@ "dev": true }, "@babel/helper-validator-option": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", - "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==", + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.0.tgz", + "integrity": "sha512-aan1MeFPxFacZeSz6Ld7YZo5aPuqnKlD7+HZY75xQsueczFccP9A7V05+oe0XpLwHK3oLorPe9eaAUljL7WEaQ==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz", + "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", + "version": "7.13.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.4.tgz", + "integrity": "sha512-uvoOulWHhI+0+1f9L4BoozY7U5cIkZ9PgJqvb041d6vypgUmtVPG4vmGm4pSggjl8BELzvHyUeJSUyEMY6b+qA==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", - "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", + "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.12.13", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.12.13", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.8.tgz", + "integrity": "sha512-hpbBwbTgd7Cz1QryvwJZRo1U0k1q8uyBmeXOSQUjdg/A2TASkhR/rz7AyqZ/kS8kbpsNA80rOYbxySBJAqmhhQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-async-generators": { @@ -477,12 +8907,12 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-syntax-dynamic-import": { @@ -567,399 +8997,400 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", - "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", + "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", + "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", + "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", + "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "@babel/helper-create-regexp-features-plugin": "^7.12.13" } }, "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" } }, "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", + "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", - "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" } }, "@babel/preset-env": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", - "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.8.tgz", + "integrity": "sha512-Sso1xOpV4S3ofnxW2DsWTE5ziRk62jEAKLGuQ+EJHC+YHTbFG38QUTixO3JVa1cYET9gkJhO1pMu+/+2dDhKvw==", "dev": true, "requires": { - "@babel/compat-data": "^7.12.7", - "@babel/helper-compilation-targets": "^7.12.5", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.11", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-proposal-async-generator-functions": "^7.13.8", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-dynamic-import": "^7.13.8", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.13.8", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.8", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.11", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.7", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.10", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.11", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.13.0", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.1.4", + "babel-plugin-polyfill-corejs3": "^0.1.3", + "babel-plugin-polyfill-regenerator": "^0.1.2", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" } }, "@babel/preset-modules": { @@ -976,63 +9407,54 @@ } }, "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.8.tgz", + "integrity": "sha512-CwQljpw6qSayc0fRG1soxHAKs1CnQMOChm4mlQP6My0kf9upVGizj/KhlTTgyUnETmHpcUXjaluNAkteRFuafg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - } - }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true } } }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/traverse": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.0.tgz", + "integrity": "sha512-xys5xi5JEhzC3RzEmSGrs/b3pJW/o87SypZ+G/PhaE7uqVQNv/jlmVIBXuoh5atqQ434LfXV+sf23Oxj0bchJQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.0", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.0", + "@babel/types": "^7.13.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.0.tgz", + "integrity": "sha512-hE+HE8rnG1Z6Wzo+MhaKE5lM5eMx71T4EHJgku2E3xIfaULhDcxiiRxUYgwX8qwP1BBSlag+TdGOt6JAidIZTA==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.12.11", @@ -1051,9 +9473,9 @@ } }, "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, "@types/minimatch": { @@ -1063,9 +9485,9 @@ "dev": true }, "@types/node": { - "version": "14.14.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", - "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==", + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", "dev": true }, "@webassemblyjs/ast": { @@ -1287,13 +9709,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true + "dev": true, + "requires": {} }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "requires": {} }, "ansi-colors": { "version": "3.2.4", @@ -1308,9 +9732,9 @@ "dev": true }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { @@ -1397,9 +9821,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -1474,106 +9898,6 @@ "loader-utils": "^1.4.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } } }, "babel-plugin-dynamic-import-node": { @@ -1585,6 +9909,36 @@ "object.assign": "^4.1.0" } }, + "babel-plugin-polyfill-corejs2": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.8.tgz", + "integrity": "sha512-kB5/xNR9GYDuRmVlL9EGfdKBSUVI/9xAU7PCahA/1hbC2Jbmks9dlBBYjHF9IHMNY2jV/G2lIG7z0tJIW27Rog==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.0", + "@babel/helper-define-polyfill-provider": "^0.1.4", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.6.tgz", + "integrity": "sha512-IkYhCxPrjrUWigEmkMDXYzM5iblzKCdCD8cZrSAkQOyhhJm26DcG+Mxbx13QT//Olkpkg/AlRdT2L+Ww4Ciphw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.4", + "core-js-compat": "^3.8.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.5.tgz", + "integrity": "sha512-EyhBA6uN94W97lR7ecQVTvH9F5tIIdEw3ZqHuU4zekMlW82k5cXNXniiB7PRxQm06BqAjVr4sDT1mOy4RcphIA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.4" + } + }, "babel-polyfill": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", @@ -1594,14 +9948,6 @@ "babel-runtime": "^6.26.0", "core-js": "^2.5.0", "regenerator-runtime": "^0.10.5" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } } }, "babel-runtime": { @@ -1651,35 +9997,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -1708,6 +10025,16 @@ "dev": true, "optional": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -1715,9 +10042,9 @@ "dev": true }, "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", "dev": true }, "body-parser": { @@ -1743,6 +10070,21 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -1796,6 +10138,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -1898,16 +10246,16 @@ } }, "browserslist": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", - "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001165", + "caniuse-lite": "^1.0.30001181", "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.621", + "electron-to-chromium": "^1.3.649", "escalade": "^3.1.1", - "node-releases": "^1.1.67" + "node-releases": "^1.1.70" } }, "buffer": { @@ -1992,13 +10340,13 @@ } }, "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "get-intrinsic": "^1.0.2" } }, "camelcase": { @@ -2008,9 +10356,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001173", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz", - "integrity": "sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw==", + "version": "1.0.30001192", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001192.tgz", + "integrity": "sha512-63OrUnwJj5T1rUmoyqYTdRWBqFFxZFlyZnRRjDR8NSUQFB6A+j/uBORU/SyJ5WzDLg4SPiZH40hQCBNdZ/jmAw==", "dev": true }, "chalk": { @@ -2022,17 +10370,6 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "chokidar": { @@ -2136,6 +10473,63 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, @@ -2148,6 +10542,23 @@ "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "collection-visit": { @@ -2176,9 +10587,9 @@ "dev": true }, "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, "commander": { @@ -2221,6 +10632,23 @@ "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "concat-map": { @@ -2316,18 +10744,18 @@ "dev": true }, "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, "core-js-compat": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.2.tgz", - "integrity": "sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ==", + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.9.1.tgz", + "integrity": "sha512-jXAirMQxrkbiiLsCx9bQPJFA6llDadKMpYrBJQJ3/c4/vsPP/fAf29h24tviRlvwUL6AmY5CHLu2GvjuYviQqA==", "dev": true, "requires": { - "browserslist": "^4.16.0", + "browserslist": "^4.16.3", "semver": "7.0.0" }, "dependencies": { @@ -2356,9 +10784,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -2401,6 +10829,14 @@ "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "crypto-browserify": { @@ -2429,12 +10865,12 @@ "dev": true }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "2.1.2" } }, "decamelize": { @@ -2490,37 +10926,6 @@ "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } } }, "del": { @@ -2584,9 +10989,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -2641,30 +11046,30 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.633", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.633.tgz", - "integrity": "sha512-bsVCsONiVX1abkWdH7KtpuDAhsQ3N3bjPYhROSAXE78roJKet0Y5wznA14JE9pzbwSZmSMAW6KiKYf1RvbTJkA==", + "version": "1.3.675", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.675.tgz", + "integrity": "sha512-GEQw+6dNWjueXGkGfjgm7dAMtXfEqrfDG3uWcZdeaD4cZ3dKYdPRQVruVXQRXtPLtOr5GNVVlNLRMChOZ611pQ==", "dev": true }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -2697,9 +11102,9 @@ } }, "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -2720,9 +11125,9 @@ } }, "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "requires": { "prr": "~1.0.1" @@ -2798,9 +11203,9 @@ "dev": true }, "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "eventsource": { @@ -2852,6 +11257,15 @@ "to-regex": "^3.0.1" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -2869,6 +11283,75 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -2924,6 +11407,21 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -2935,17 +11433,6 @@ "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "extglob": { @@ -2982,34 +11469,11 @@ "is-extendable": "^0.1.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -3040,6 +11504,13 @@ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -3060,6 +11531,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -3076,26 +11553,44 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "findup-sync": { @@ -3121,9 +11616,9 @@ } }, "follow-redirects": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", - "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", "dev": true }, "for-in": { @@ -3182,9 +11677,9 @@ "dev": true }, "fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -3207,9 +11702,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -3263,32 +11758,17 @@ "dev": true, "requires": { "global-prefix": "^3.0.0" - }, - "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } } }, "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" } }, "globals": { @@ -3319,9 +11799,9 @@ } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, "handle-thing": { @@ -3346,9 +11826,9 @@ "dev": true }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-value": { @@ -3552,6 +12032,51 @@ "requires": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } } }, "imurmurhash": { @@ -3629,23 +12154,12 @@ "dev": true }, "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "kind-of": "^6.0.0" } }, "is-arguments": { @@ -3673,24 +12187,22 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" } }, "is-date-object": { @@ -3700,29 +12212,24 @@ "dev": true }, "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } }, "is-extglob": { "version": "2.1.1", @@ -3799,11 +12306,12 @@ } }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "dev": true, "requires": { + "call-bind": "^1.0.2", "has-symbols": "^1.0.1" } }, @@ -3874,12 +12382,12 @@ "dev": true }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "killable": { @@ -3909,22 +12417,38 @@ "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, "loglevel": { @@ -3943,13 +12467,12 @@ } }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" } }, "map-cache": { @@ -4038,9 +12561,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -4052,18 +12575,18 @@ "dev": true }, "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", "dev": true }, "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", "dev": true, "requires": { - "mime-db": "1.45.0" + "mime-db": "1.46.0" } }, "minimalistic-assert": { @@ -4119,17 +12642,6 @@ "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } } }, "mkdirp": { @@ -4156,9 +12668,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "multicast-dns": { @@ -4177,6 +12689,13 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -4260,9 +12779,9 @@ } }, "node-releases": { - "version": "1.1.67", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.67.tgz", - "integrity": "sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg==", + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", "dev": true }, "normalize-path": { @@ -4306,6 +12825,43 @@ "is-descriptor": "^0.1.0" } }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -4318,12 +12874,12 @@ } }, "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, @@ -4433,12 +12989,12 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-map": { @@ -4523,9 +13079,9 @@ "dev": true }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { @@ -4546,6 +13102,12 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -4594,12 +13156,12 @@ } }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" } }, "portfinder": { @@ -4621,12 +13183,6 @@ "requires": { "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true } } }, @@ -4685,9 +13241,9 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } @@ -4813,6 +13369,17 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "readdirp": { @@ -4841,9 +13408,9 @@ } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", "dev": true }, "regenerator-transform": { @@ -4873,18 +13440,6 @@ "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" - }, - "dependencies": { - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - } } }, "regexpu-core": { @@ -4908,9 +13463,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.7.tgz", + "integrity": "sha512-ib77G0uxsA2ovgiYbCVGx4Pv3PSttAx2vIwidqQzbL2U5S4Q+j00HdSAneSBuyVcMvEnTXMjiGgB+DlXozVhpQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -4960,6 +13515,16 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, "resolve-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", @@ -4989,6 +13554,19 @@ "is-windows": "^1.0.1", "resolve-dir": "^1.0.0" } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } } } }, @@ -5066,14 +13644,14 @@ "dev": true }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" } }, "select-hose": { @@ -5092,9 +13670,9 @@ } }, "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "send": { @@ -5118,6 +13696,23 @@ "statuses": "~1.5.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -5150,6 +13745,15 @@ "parseurl": "~1.3.2" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -5168,6 +13772,12 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -5214,6 +13824,12 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true } } }, @@ -5276,6 +13892,15 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -5293,6 +13918,75 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -5315,35 +14009,6 @@ "requires": { "is-descriptor": "^1.0.0" } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } } } }, @@ -5400,12 +14065,6 @@ "requires": { "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true } } }, @@ -5453,9 +14112,9 @@ } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "spdy": { @@ -5469,23 +14128,6 @@ "http-deceiver": "^1.2.7", "select-hose": "^2.0.0", "spdy-transport": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } } }, "spdy-transport": { @@ -5502,21 +14144,6 @@ "wbuf": "^1.7.3" }, "dependencies": { - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -5566,6 +14193,63 @@ "requires": { "is-descriptor": "^0.1.0" } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, @@ -5614,6 +14298,23 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -5623,24 +14324,32 @@ "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^2.0.0" } }, "strip-eof": { @@ -5650,9 +14359,9 @@ "dev": true }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -5700,6 +14409,87 @@ "worker-farm": "^1.7.0" }, "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5859,6 +14649,14 @@ "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } } }, "unique-filename": { @@ -5932,9 +14730,9 @@ "dev": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -5965,9 +14763,9 @@ } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -6016,9 +14814,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", + "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", "dev": true }, "vary": { @@ -6111,7 +14909,11 @@ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, - "optional": true + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } }, "glob-parent": { "version": "3.1.0", @@ -6200,27 +15002,15 @@ "webpack-sources": "^1.4.1" }, "dependencies": { - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } @@ -6242,6 +15032,17 @@ "supports-color": "^6.1.0", "v8-compile-cache": "^2.1.1", "yargs": "^13.3.2" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "webpack-dev-middleware": { @@ -6258,9 +15059,9 @@ }, "dependencies": { "mime": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.0.tgz", - "integrity": "sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true } } @@ -6306,12 +15107,6 @@ "yargs": "^13.3.2" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -6359,21 +15154,16 @@ "upath": "^1.1.1" } }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, "fsevents": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, - "optional": true + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } }, "glob-parent": { "version": "3.1.0", @@ -6405,12 +15195,6 @@ "binary-extensions": "^1.0.0" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", @@ -6422,19 +15206,24 @@ "readable-stream": "^2.0.2" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" } } } @@ -6517,6 +15306,23 @@ "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "wrappy": { @@ -6541,9 +15347,9 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { @@ -6568,6 +15374,42 @@ "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } } }, "yargs-parser": { diff --git a/front/package.json b/front/package.json index 562ceb9..c446e12 100644 --- a/front/package.json +++ b/front/package.json @@ -21,8 +21,8 @@ "author": "Fabrice PENHOËT", "license": "GPL-3.0-or-later", "devDependencies": { - "@babel/core": "^7.12.10", - "@babel/preset-env": "^7.12.11", + "@babel/core": "^7.13.8", + "@babel/preset-env": "^7.13.8", "babel-loader": "^8.2.2", "babel-polyfill": "^6.26.0", "webpack": "^4.46.0", @@ -31,6 +31,5 @@ }, "browserslist": [ "> 1%" - ], - "dependencies": {} + ] } diff --git a/front/public/JS/accountUser.app.js b/front/public/JS/accountUser.app.js index abfc11c..47ce580 100644 --- a/front/public/JS/accountUser.app.js +++ b/front/public/JS/accountUser.app.js @@ -1033,10 +1033,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); /* harmony import */ var _tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/webportage.js */ "./src/tools/webportage.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DES FORMULAIRES PERMETTANT AUX UTILISATEURS DE METTRE À JOUR LEURS INFORMATIONS + LEUR ABONNEMENT /// Vérifier que l'utilisateur est bien connecté, a le bon statut et le rediriger vers le formulaire d'inscription si ce n'est pas le cas. /// Si c'est ok, on récupère les infos de son compte et son abonnement et les affiche dans le formulaire. @@ -1046,15 +1042,16 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Un message venant d'une autre page peut aussi être à afficher lors du premier chargement. // Fichier de configuration côté client : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // besoin de toutes les déclarations pour la fonction : updateAccountLink() +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // besoin de toutes les déclarations pour la fonction : updateAccountLink() -var _require = __webpack_require__(/*! ../../config/instance */ "../config/instance.js"), - beginCodeGodfather = _require.beginCodeGodfather; +const { + beginCodeGodfather +} = __webpack_require__(/*! ../../config/instance */ "../config/instance.js"); -var configUsers = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // besoin de tous le fichier pour configurer le formulaire +const configUsers = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // besoin de tous le fichier pour configurer le formulaire // Fonctions utiles au script @@ -1067,233 +1064,206 @@ var configUsers = __webpack_require__(/*! ../../config/users */ "../config/users // Dictionnaires : -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require2.serverError; +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - infosUserNbGodChilds = _require3.infosUserNbGodChilds, - infosUserNoGodchilds = _require3.infosUserNoGodchilds, - needBeConnected = _require3.needBeConnected; +const { + infosUserNbGodChilds, + infosUserNoGodchilds, + needBeConnected +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); -var _require4 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/subscription$")("./" + lang + "/subscription"), - infosExpirated = _require4.infosExpirated, - infosNbDays = _require4.infosNbDays; // Principaux éléments du DOM manipulés : +const { + infosExpirated, + infosNbDays +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/subscription$")("./" + lang + "/subscription"); // Principaux éléments du DOM manipulés : -var divCrash = document.getElementById("crash"); -var divMain = document.getElementById("main-content"); -var divMessage = document.getElementById("message"); -var divResponse = document.getElementById("response"); -var divGodfatherInfos = document.getElementById("godfatherInfos"); -var divGodchilds = document.getElementById("godchilds"); -var divSubscribeInfos = document.getElementById("subscribeInfos"); -var divSubscribeIntro = document.getElementById("subscribeIntro"); -var formAccount = document.getElementById("accountUpdate"); -var newPassword = document.getElementById("newPassword"); -var showGFEmail = document.getElementById("godfatherEmail"); -var showGFCode = document.getElementById("godfatherCode"); +const divCrash = document.getElementById("crash"); +const divMain = document.getElementById("main-content"); +const divMessage = document.getElementById("message"); +const divResponse = document.getElementById("response"); +const divGodfatherInfos = document.getElementById("godfatherInfos"); +const divGodchilds = document.getElementById("godchilds"); +const divSubscribeInfos = document.getElementById("subscribeInfos"); +const divSubscribeIntro = document.getElementById("subscribeIntro"); +const formAccount = document.getElementById("accountUpdate"); +const newPassword = document.getElementById("newPassword"); +const showGFEmail = document.getElementById("godfatherEmail"); +const showGFCode = document.getElementById("godfatherCode"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, getInfos, abo9, abo18, abo36, abo54, CGV, divWPBtns, xhrGetGodchilds; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(["user"], "/" + configTemplate.connectionPage, { - message: needBeConnected, - color: "error" - }, window.location); +const initialise = async () => { + try { + // Si l'utilisateur n'est pas connecté avec le bon statut, pas la peine d'aller + loin : + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(["user"], "/" + configTemplate.connectionPage, { + message: needBeConnected, + color: "error" + }, window.location); - case 3: - isConnected = _context.sent; + if (isConnected) { + divMain.style.display = "block"; // l'éventuelle ancre est ignorée, car absente du DOM avant d'avoir vérifié la connexion - if (isConnected) { - divMain.style.display = "block"; // l'éventuelle ancre est ignorée, car absente du DOM avant d'avoir vérifié la connexion + if (window.location.hash !== undefined) window.location.assign(window.location.hash); - if (window.location.hash !== undefined) window.location.assign(window.location.hash); + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); + } - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); - } + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); // Initialise le formulaire permettant de mettre à jour les infos : - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); // Initialise le formulaire permettant de mettre à jour les infos : + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, formAccount); // Certains navigateurs remplissent les champs password : - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, formAccount); // Certains navigateurs remplissent les champs password : + newPassword.value = ""; // Fonction affichant les infos connues au premier affichage, puis après envoi mise à jour - newPassword.value = ""; // Fonction affichant les infos connues au premier affichage, puis après envoi mise à jour + const getInfos = () => { + const xhrGetInfos = new XMLHttpRequest(); + xhrGetInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getUserInfos + user.id); - getInfos = function getInfos() { - var xhrGetInfos = new XMLHttpRequest(); - xhrGetInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getUserInfos + user.id); + xhrGetInfos.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - xhrGetInfos.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && response.User != undefined && response.Subscription != undefined) { - for (var data in response.User) { - if (formAccount.elements[data] !== undefined) { - if (response.User[data] !== true && response.User[data] !== false) // booléen = case à cocher ! - formAccount.elements[data].value = response.User[data];else if (response.User[data] == true) // si false, on ne fait rien - formAccount.elements["" + data].checked = "checked"; - } - } // jours de réception - - - for (var i in response.Subscription.receiptDays) { - formAccount.elements["d" + response.Subscription.receiptDays[i]].checked = "checked"; - } // "codes" possibles à transmettre pour parrainer d'autres utilisateurs - - - showGFEmail.innerHTML = response.User.email; - showGFCode.innerHTML = beginCodeGodfather + response.User.id; - } - - var beginSubTS = new Date(response.Subscription.createdAt).getTime(); - - if (response.Subscription.numberOfDays !== 0) { - divGodfatherInfos.style.display = "block"; - divSubscribeInfos.style.display = "block"; - var nbDaysOk = response.Subscription.numberOfDays - Math.round((Date.now() - beginSubTS) / 1000 / 3600 / 24); - if (nbDaysOk > 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSubscribeIntro, "p", infosNbDays.replace("NB_DAYS", nbDaysOk), "", ["info"]);else { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSubscribeIntro, "p", infosExpirated.replace("NB_DAYS", nbDaysOk), "", ["error"]); - window.location.assign("#subscribe"); - } - } - } - }; - - xhrGetInfos.setRequestHeader("Authorization", "Bearer " + user.token); - xhrGetInfos.send(); - }; // Remonte les infos déjà enregistrées : - - - getInfos(); // Traitement de l'envoi d'une mise à jour des infos - - formAccount.addEventListener("submit", function (e) { - e.preventDefault(); - divResponse.innerHTML = ""; - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formAccount); // recomposition des jours valables pour l'abonnement : - - datas.receiptDays = ""; - - for (var i = 1; i <= 7; i++) { - if (datas["d" + i] !== undefined) datas.receiptDays += "" + i; + if (this.status === 200 && response.User != undefined && response.Subscription != undefined) { + for (let data in response.User) { + if (formAccount.elements[data] !== undefined) { + if (response.User[data] !== true && response.User[data] !== false) // booléen = case à cocher ! + formAccount.elements[data].value = response.User[data];else if (response.User[data] == true) // si false, on ne fait rien + formAccount.elements["" + data].checked = "checked"; } - - datas.timeDifference = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["getTimeDifference"])(); - var xhrUserUpdate = new XMLHttpRequest(); - if (datas.deleteOk !== undefined) xhrUserUpdate.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + "/" + user.id);else xhrUserUpdate.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.updateUserInfos + user.id); - - xhrUserUpdate.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && response.message != undefined) { - if (Array.isArray(response.message)) response.message = response.message.join("
");else response.message = response.message; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); - } else if (response.errors) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); // dans tous les cas, je mets à jour le contenu du formulaire : + } // jours de réception - getInfos(); - } - }; + for (let i in response.Subscription.receiptDays) formAccount.elements["d" + response.Subscription.receiptDays[i]].checked = "checked"; // "codes" possibles à transmettre pour parrainer d'autres utilisateurs - xhrUserUpdate.setRequestHeader("Content-Type", "application/json"); - xhrUserUpdate.setRequestHeader("Authorization", "Bearer " + user.token); - if (datas) { - datas.output = "html"; - xhrUserUpdate.send(JSON.stringify(datas)); - } - }); // on passe à la caisse ? - - abo9 = document.getElementById("abo9"); - abo18 = document.getElementById("abo18"); - abo36 = document.getElementById("abo36"); - abo54 = document.getElementById("abo54"); - CGV = document.getElementById("CGVOk"); - divWPBtns = document.getElementById("WPBtns"); - divWPBtns.style.display = "none"; - abo9.addEventListener("change", function (e) { - Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo9"); - }); - abo18.addEventListener("change", function (e) { - Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo18"); - }); - abo36.addEventListener("change", function (e) { - Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo36"); - }); - abo54.addEventListener("change", function (e) { - Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo54"); - }); - CGV.addEventListener("change", function (e) { - if (CGV.checked === true) { - divWPBtns.style.display = "block"; - if (abo9.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn9");else if (abo18.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn18");else if (abo36.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn36");else if (abo54.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn54");else { - divWPBtns.style.display = "none"; - CGV.checked = false; - } - } else divWPBtns.style.display = "none"; - }); // Liste des filleuls, si il y en a - - xhrGetGodchilds = new XMLHttpRequest(); - xhrGetGodchilds.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getGodChilds); - - xhrGetGodchilds.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText), - txtGodchilds = ""; - - if (this.status === 200) { - var nbGodchilds = response.length; - if (nbGodchilds === 0) txtGodchilds = infosUserNoGodchilds;else { - txtGodchilds = infosUserNbGodChilds.replace("#NB", nbGodchilds); - - for (var i in response) { - txtGodchilds += response[i].name + " (" + response[i].email + ") "; - } - } - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGodchilds, "p", txtGodchilds, "", ["info"]); - } - }; - - xhrGetGodchilds.setRequestHeader("Authorization", "Bearer " + user.token); - xhrGetGodchilds.send(); + showGFEmail.innerHTML = response.User.email; + showGFCode.innerHTML = beginCodeGodfather + response.User.id; } - _context.next = 11; - break; + const beginSubTS = new Date(response.Subscription.createdAt).getTime(); - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); - console.error(_context.t0); + if (response.Subscription.numberOfDays !== 0) { + divGodfatherInfos.style.display = "block"; + divSubscribeInfos.style.display = "block"; + const nbDaysOk = response.Subscription.numberOfDays - Math.round((Date.now() - beginSubTS) / 1000 / 3600 / 24); + if (nbDaysOk > 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSubscribeIntro, "p", infosNbDays.replace("NB_DAYS", nbDaysOk), "", ["info"]);else { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSubscribeIntro, "p", infosExpirated.replace("NB_DAYS", nbDaysOk), "", ["error"]); + window.location.assign("#subscribe"); + } + } + } + }; - case 11: - case "end": - return _context.stop(); + xhrGetInfos.setRequestHeader("Authorization", "Bearer " + user.token); + xhrGetInfos.send(); + }; // Remonte les infos déjà enregistrées : + + + getInfos(); // Traitement de l'envoi d'une mise à jour des infos + + formAccount.addEventListener("submit", function (e) { + e.preventDefault(); + divResponse.innerHTML = ""; + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formAccount); // recomposition des jours valables pour l'abonnement : + + datas.receiptDays = ""; + + for (let i = 1; i <= 7; i++) { + if (datas["d" + i] !== undefined) datas.receiptDays += "" + i; } - } - }, _callee, null, [[0, 7]]); - })); - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + datas.timeDifference = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["getTimeDifference"])(); + const xhrUserUpdate = new XMLHttpRequest(); + if (datas.deleteOk !== undefined) xhrUserUpdate.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + "/" + user.id);else xhrUserUpdate.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.updateUserInfos + user.id); + + xhrUserUpdate.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 200 && response.message != undefined) { + if (Array.isArray(response.message)) response.message = response.message.join("
");else response.message = response.message; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); + } else if (response.errors) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); // dans tous les cas, je mets à jour le contenu du formulaire : + + + getInfos(); + } + }; + + xhrUserUpdate.setRequestHeader("Content-Type", "application/json"); + xhrUserUpdate.setRequestHeader("Authorization", "Bearer " + user.token); + + if (datas) { + datas.output = "html"; + xhrUserUpdate.send(JSON.stringify(datas)); + } + }); // on passe à la caisse ? + + const abo9 = document.getElementById("abo9"); + const abo18 = document.getElementById("abo18"); + const abo36 = document.getElementById("abo36"); + const abo54 = document.getElementById("abo54"); + const CGV = document.getElementById("CGVOk"); + const divWPBtns = document.getElementById("WPBtns"); + divWPBtns.style.display = "none"; + abo9.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo9"); + }); + abo18.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo18"); + }); + abo36.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo36"); + }); + abo54.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo54"); + }); + CGV.addEventListener("change", function (e) { + if (CGV.checked === true) { + divWPBtns.style.display = "block"; + if (abo9.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn9");else if (abo18.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn18");else if (abo36.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn36");else if (abo54.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn54");else { + divWPBtns.style.display = "none"; + CGV.checked = false; + } + } else divWPBtns.style.display = "none"; + }); // Liste des filleuls, si il y en a + + const xhrGetGodchilds = new XMLHttpRequest(); + xhrGetGodchilds.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getGodChilds); + + xhrGetGodchilds.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText), + txtGodchilds = ""; + + if (this.status === 200) { + const nbGodchilds = response.length; + if (nbGodchilds === 0) txtGodchilds = infosUserNoGodchilds;else { + txtGodchilds = infosUserNbGodChilds.replace("#NB", nbGodchilds); + + for (let i in response) txtGodchilds += response[i].name + " (" + response[i].email + ") "; + } + } + + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGodchilds, "p", txtGodchilds, "", ["info"]); + } + }; + + xhrGetGodchilds.setRequestHeader("Authorization", "Bearer " + user.token); + xhrGetGodchilds.send(); + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); + console.error(e); + } +}; initialise(); @@ -1313,14 +1283,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1338,32 +1307,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
"); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1387,13 +1345,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1414,25 +1372,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1440,49 +1390,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1509,27 +1437,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1538,11 +1462,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1556,96 +1480,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1664,30 +1560,30 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unCheckAllOthers", function() { return unCheckAllOthers; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showBtnPayment", function() { return showBtnPayment; }); -var checkBoxes = { +const checkBoxes = { "CGV": document.getElementById("CGVOk"), "abo1": document.getElementById("abo1"), "abo2": document.getElementById("abo2"), "abo3": document.getElementById("abo3"), "abo4": document.getElementById("abo4") }; -var divWPBtns = document.getElementById("WPBtns"); // Lorsque l'on sélectionne un montant, les autres options + les CGV sont désélectionnés +const divWPBtns = document.getElementById("WPBtns"); // Lorsque l'on sélectionne un montant, les autres options + les CGV sont désélectionnés -var unCheckAllOthers = function unCheckAllOthers(choice) { - for (var id in checkBoxes) { +const unCheckAllOthers = choice => { + for (let id in checkBoxes) { if (id !== choice) checkBoxes[id].checked = false; divWPBtns.style.display = "none"; } }; -var btns = { +const btns = { "btn1": document.getElementById("WPBtn1"), "btn2": document.getElementById("WPBtn2"), "btn3": document.getElementById("WPBtn3"), "btn4": document.getElementById("WPBtn4") }; // Affiche le bon bouton de paiement et cache les autres -var showBtnPayment = function showBtnPayment(choice) { - for (var id in btns) { +const showBtnPayment = choice => { + for (let id in btns) { if (id !== choice) btns[id].style.display = "none";else btns[id].style.display = "block"; } }; @@ -1695,4 +1591,4 @@ var showBtnPayment = function showBtnPayment(choice) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FjY291bnRVc2VyLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvd2VicG9ydGFnZS5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIiwiaW5mb3NFeHBpcmF0ZWQiLCJpbmZvc0V4cGlyYXRlZEFkbWluIiwiaW5mb3NOYkRheXMiLCJpbmZvc05iRGF5c0FkbWluIiwiaW5mb3NQYXltZW50c0FkbWluIiwiaXNOb3RWYWxpZGVkIiwibWFpbEVuZEZyZWVUaW1lQm9keUhUTUwiLCJtYWlsRW5kRnJlZVRpbWVCb2R5VHh0IiwibWFpbEVuZEZyZWVUaW1lTGlua1R4dCIsIm1haWxFbmRGcmVlVGltZU1lc3NhZ2UiLCJtYWlsRW5kRnJlZVRpbWVTdWJqZWN0IiwibWFpbEV4cGlyYXRpb25Cb2R5SFRNTCIsIm1haWxFeHBpcmF0aW9uQm9keVR4dCIsIm1haWxFeHBpcmF0aW9uTGlua1R4dCIsIm1haWxFeHBpcmF0aW9uTWVzc2FnZSIsIm1haWxFeHBpcmF0aW9uUmVsYXVuY2hUeHQiLCJtYWlsRXhwaXJhdGlvblN1YmplY3QiLCJtYWlsTmV3RWxlbWVudEZvckdyb3VwVHh0IiwibWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5VHh0IiwibWFpbFN0b3BNYWlsTGlua1R4dCIsIm5lZWRLbm93SWZOb3RpY2VPayIsIm5lZWRJbnRlZ2VyTnVtYmVyT2ZEYXlzIiwibmVlZE1pbk51bWJlck9mRGF5cyIsIm5lZWROb3RUb29Mb25nRGF5c0xpc3QiLCJuZWVkTnVtYmVyT2ZEYXlzIiwibmVlZFVuaXF1ZURheXNMaXN0IiwibmVlZFZhbGlkRGF5c0xpc3QiLCJub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIiwidW5zdWJzY3JpcHRpb25PayIsInVuc3Vic2NyaXB0aW9uRmFpbCIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJjb25maWdVc2VycyIsImRpdkNyYXNoIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1haW4iLCJkaXZNZXNzYWdlIiwiZGl2UmVzcG9uc2UiLCJkaXZHb2RmYXRoZXJJbmZvcyIsImRpdkdvZGNoaWxkcyIsImRpdlN1YnNjcmliZUluZm9zIiwiZGl2U3Vic2NyaWJlSW50cm8iLCJmb3JtQWNjb3VudCIsInNob3dHRkVtYWlsIiwic2hvd0dGQ29kZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImNoZWNrU2Vzc2lvbiIsIm1lc3NhZ2UiLCJjb2xvciIsIndpbmRvdyIsImxvY2F0aW9uIiwiaXNDb25uZWN0ZWQiLCJzdHlsZSIsImRpc3BsYXkiLCJoYXNoIiwiYXNzaWduIiwiZ2V0TG9jYWx5IiwiYWRkRWxlbWVudCIsInJlbW92ZUxvY2FseSIsInVzZXIiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsImdldEluZm9zIiwieGhyR2V0SW5mb3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwiVXNlciIsIlN1YnNjcmlwdGlvbiIsImRhdGEiLCJlbGVtZW50cyIsImNoZWNrZWQiLCJyZWNlaXB0RGF5cyIsImlubmVySFRNTCIsImJlZ2luU3ViVFMiLCJjcmVhdGVkQXQiLCJnZXRUaW1lIiwibnVtYmVyT2ZEYXlzIiwibmJEYXlzT2siLCJyb3VuZCIsIm5vdyIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInNlbmQiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ0aW1lRGlmZmVyZW5jZSIsImdldFRpbWVEaWZmZXJlbmNlIiwieGhyVXNlclVwZGF0ZSIsImRlbGV0ZU9rIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwib3V0cHV0Iiwic3RyaW5naWZ5IiwiYWJvOSIsImFibzE4IiwiYWJvMzYiLCJhYm81NCIsIkNHViIsImRpdldQQnRucyIsInVuQ2hlY2tBbGxPdGhlcnMiLCJzaG93QnRuUGF5bWVudCIsInhockdldEdvZGNoaWxkcyIsInR4dEdvZGNoaWxkcyIsIm5iR29kY2hpbGRzIiwiY29uc29sZSIsImVycm9yIiwic2F2ZUxvY2FseSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImxvZyIsImxpbmsiLCJob21lUGFnZSIsImlucHV0c0NvbmYiLCJteUZvcm0iLCJpZElucHV0IiwiaW5wdXRIVE1MIiwiYXR0cmlidXRlIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImVudHJpZXMiLCJlbnRyaWUiLCJlbXB5Rm9ybSIsInR5cGUiLCJlbXB5QW5kSGlkZUZvcm0iLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwiY2hlY2tCb3hlcyIsImNob2ljZSIsImJ0bnMiXSwibWFwcGluZ3Mi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QUNDLGNBQVQsQ0FBd0IsUUFBeEIsQ0FGYjtBQUdJLFVBQVNELFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixRQUF4QixDQUhiO0FBSUksVUFBU0QsUUFBUSxDQUFDQyxjQUFULENBQXdCLFFBQXhCO0FBSmIsQ0FEQSxDLENBUUE7O0FBQ08sSUFBTStFLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsQ0FBQ3NFLE1BQUQsRUFDOUI7QUFDSSxPQUFLLElBQUkzTSxFQUFULElBQWU0TSxJQUFmLEVBQ0E7QUFDSSxRQUFHNU0sRUFBRSxLQUFHMk0sTUFBUixFQUNJQyxJQUFJLENBQUM1TSxFQUFELENBQUosQ0FBU3lFLEtBQVQsQ0FBZUMsT0FBZixHQUF1QixNQUF2QixDQURKLEtBR0lrSSxJQUFJLENBQUM1TSxFQUFELENBQUosQ0FBU3lFLEtBQVQsQ0FBZUMsT0FBZixHQUF1QixPQUF2QjtBQUNQO0FBQ0osQ0FUTSxDIiwiZmlsZSI6Ii4vSlMvYWNjb3VudFVzZXIuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvYWNjb3VudFVzZXIuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3N1YnNjcmlwdGlvblwiOiBcIi4uL2xhbmcvZnIvc3Vic2NyaXB0aW9uLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvc3Vic2NyaXB0aW9uJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIDogXCJUb3VzIGxlcyBhYm9ubsOpcyBvbnQgw6l0w6kgdHJhaXTDqXMgcG91ciBsZSBtb21lbnQuXCIsXG4gICAgaW5mb3NFeHBpcmF0ZWQ6IFwiVm90cmUgYWJvbm5lbWVudCBhIGV4cGlyw6ksIG1haXMgaWwgdm91cyByZXN0ZSBlbmNvcmUgcXVlbHF1ZXMgam91cnMgYXZhbnQgcXVlIHZvdHJlIGNvbXB0ZSBldCB2b3MgZG9ubsOpZXMgbmUgc29pZW50IGNvbXBsw6h0ZW1lbnQgc3VwcHJpbcOpZXMuPGJyPlBvdXIgY2UgZmFpcmUsIHN1aXZleiBzYW5zIHRhcmRlciBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NFeHBpcmF0ZWRBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBhIGV4cGlyw6kuXCIsXG4gICAgaW5mb3NOYkRheXM6IFwiVm90cmUgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi48YnI+Vm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgcHJvbG9uZ2VyIHZvdHJlIGFib25uZW1lbnQgZW4gc3VpdmFudCBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NOYkRheXNBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi5cIixcbiAgICBpbmZvc1BheW1lbnRzQWRtaW4gOiBcIkRBVEVfUEFZTUVOVCA6IHBhaWVtZW50IGRlIEFNT1VOVCDigqwgYXUgbm9tIGRlIENMSUVOVF9OQU1FLlwiLFxuICAgIGlzTm90VmFsaWRlZCA6IFwiQ2V0IHV0aWxpc2F0ZXVyIG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS48YnI+Vm91cyBwb3V2ZXogbGUgZmFpcmUgw6Agc2EgcGxhY2UgPGEgaHJlZj0nI3ZhbGlkYXRpb25Payc+ZW4gY29jaGFudCBsYSBjYXNlIGluZGlxdcOpZTwvYT4gZXQgZW5yZWdpc3RyYW50LlwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlIVE1MOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy48YnI+PGJyPlBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNvdXNjcmlyZSDDoCB1biBhYm9ubmVtZW50IHNhbnMgdGFyZGVyIGVuIGNsaXF1YW50IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLlxcblxcblBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNhbnMgYXR0ZW5kcmUgc291c2NyaXJlIMOgIHVuIGFib25uZW1lbnQgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lTGlua1R4dCA6IFwiTSdhYm9ubmVyLlwiLFxuICAgIG1haWxFbmRGcmVlVGltZU1lc3NhZ2U6IFwiIHJlbGFuY2VzIGVudm95w6llcy5cIixcbiAgICBtYWlsRW5kRnJlZVRpbWVTdWJqZWN0OiBcIlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCB2YSBleHBpcmVyXCIsXG4gICAgbWFpbEV4cGlyYXRpb25Cb2R5SFRNTDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSBhYm9ubmVtZW50IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLjxicj48YnI+UG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgU0lURV9OQU1FLCB2b3VzIHBvdXZleiBsZSBwcm9sb25nZXIgZMOocyBhdWpvdXJkJ2h1aSBlbiBjbGlxdWFudCBzdXIgbGUgbGllbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBtYWlsRXhwaXJhdGlvbkJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm90cmUgYWJvbm5lbWVudCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy5cXG5cXG5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBTSVRFX05BTUUsIHZvdXMgcG91dmV6IGxlIHByb2xvbmdlciBkw6hzIGF1am91cmQnaHVpIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxFeHBpcmF0aW9uTGlua1R4dCA6IFwiUHJvbG9uZ2VyIG1vbiBhYm9ubmVtZW50LlwiLFxuICAgIG1haWxFeHBpcmF0aW9uTWVzc2FnZTogXCJGSVJTVCBwcmVtacOocmVzIGV0IFNFQ09ORCBkZXV4acOobWVzIHJlbGFuY2VzIGVudm95w6llcyBwb3VyIGRlcyBhYm9ubmVtZW50cyBleHBpcmFudCBkJ2ljaSBwZXUuXCIsXG4gICAgbWFpbEV4cGlyYXRpb25SZWxhdW5jaFR4dDogXCJbUmFwcGVsXSBcIixcbiAgICBtYWlsRXhwaXJhdGlvblN1YmplY3Q6IFwiVm90cmUgYWJvbm5lbWVudCB2YSBiaWVudMO0dCBleHBpcmVyXCIsXG4gICAgbWFpbE5ld0VsZW1lbnRGb3JHcm91cFR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm9pY2kgbGUgbGllbiB2ZXJzIGxlIG5vdXZlbCBhcnRpY2xlIMOgIGxpcmUgOlxcblxcblFVRVNUSU9OTkFJUkVfVVJMXFxuXFxuQm9ubmUgbGVjdHVyZSAhXFxuXFxuU3RvcHBlciBsZXMgZW52b2lzID9cXG5VTlNVQlNDUklCRV9VUkxcIixcbiAgICBtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvaWNpIGxlIGxpZW4gdmVycyBsZSBub3V2ZWF1IHF1aXogOlxcblxcblFVRVNUSU9OTkFJUkVfVVJMXFxuXFxuQm9ubmUgbGVjdHVyZSAhXFxuXFxuU3RvcHBlciBsZXMgZW52b2lzID9cXG5VTlNVQlNDUklCRV9VUkxcIixcbiAgICBtYWlsU3RvcE1haWxMaW5rVHh0IDogXCJTdG9wcGVyIGxlcyBlbnZvaXMuXCIsXG4gICAgbmVlZEtub3dJZk5vdGljZU9rIDogXCJJbCBtYW5xdWUgbCdpbmZvcm1hdGlvbiBzdXIgbCdhY2NlcHRhdGlvbiBvdSBub24gZGUgcmVjZXZvaXIgZGVzIG5vdGlmaWNhdGlvbnMuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZiAhXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdEYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0ICh0cm9wIGxvbmd1ZSkuXCIsXG4gICAgbmVlZE51bWJlck9mRGF5cyA6IFwiSWwgZmF1dCB1biBub21icmUgZGUgam91cnMgcG91ciBsJ2Fib25uZW1lbnQuXCIsXG4gICAgbmVlZFVuaXF1ZURheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQuIERvdWJsb24gOiBcIixcbiAgICBuZWVkVmFsaWREYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0LiBDYXJhY3TDqHJlIG5vbiB2YWxpZGUgOiBcIixcbiAgICBub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIDogXCJBdWN1biBub3V2ZWF1IHF1ZXN0aW9ubmFpcmUgdHJvdXbDqSBwb3VyIHVuIGFib25uw6kgOiBcIixcbiAgICB1bnN1YnNjcmlwdGlvbk9rIDogXCJWb3RyZSBkZW1hbmRlIGEgYmllbiDDqXTDqSBwcmlzZSBlbiBjb21wdGUuIFZvdXMgbmUgcmVjZXZyZXogcGx1cyBkZSBtZXNzYWdlcyB2ZW5hbnQgZHUgc2l0ZSwgc2F1ZiBwb3VyIHZvdXMgc2lnbmFsZXIgbGEgZmluIGRlIHZvdHJlIGFib25uZW1lbnQuPGJyPk4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy8jVVJMJz7DoCBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGU8L2E+IHBvdXIgZGUgbm91dmVhdSBhdXRvcmlzZXIgY2VydGFpbnMgZW52b2lzLlwiLFxuICAgIHVuc3Vic2NyaXB0aW9uRmFpbCA6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgbGllbiBkZSBkw6lzYWJvbm5lbWVudCBuZSBmb25jdGlvbm5lIHBhcy48YnI+Vm91cyBwb3V2ZXogPGEgaHJlZj0nLyNVUkwnPmFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZTwvYT4gcG91ciBkw6lzYWN0aXZlciBsZXMgZW52b2lzIG1hbnVlbGxlbWVudC5cIlxufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqSBhdSBzaXRlICFcIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBiYWRQYXNzd29yZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbmUgY29ycmVzcG9uZCBhdXggaW5mb3JtYXRpb25zIHNhaXNpZXMuXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsIFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgZmFpbEJvdFRlc3Q6IFwiVW4gcHJvYmzDqG1lIGEgw6l0w6kgcmVuY29udHLDqSBkdXJhbnQgdm90cmUgaW5zY3JpcHRpb24uIEVuIGNhcyBkZSBkaWZmaWN1bHTDqSwgbidow6lzaXRleiBwYXMgY29udGFjdGVyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBmYWlsQm90VGVzdExvZzogXCJVbmUgaW5zY3JpcHRpb24gYSDDqXTDqSBibG9xdcOpZSwgcGFyY2UgcXVlIGxlIGNoYW1wIGVtYWlsMiDDqXRhaXQgcmVuc2VpZ27DqSBhdmVjIDogXCIsXG4gICAgZm9ybXNFbWFpbExhYmVsOiBcIkUtbWFpbCA6XCIsXG4gICAgZm9ybXNFbWFpbFBsYWNlaG9sZGVyOiBcIlZvdHJlIGFkcmVzc2UgZS1tYWlsXCIsXG4gICAgZm9ybXNFbWFpbDJQbGFjZWhvbGRlcjogXCJTaSB2b3VzIHZveWV6IGNlIGNoYW1wLCBsYWlzc2V6LWxlIHZpZGVcIiwvL2NoYW1wIHF1aSBuZSBkZXZyYWl0IHBhcyDDqnRyZSB2aXNpYmxlIHBhciBkZXMgaHVtYWluc1xuICAgIGZvcm1zQ0dVT2tMYWJlbDogXCJKJ2FjY2VwdGUgPGEgaHJlZj0jbGluayB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgcmVsPVxcXCJub29wZW5lclxcXCIgdGl0bGU9XFxcIsOAIGxpcmUgOilcXFwiPmxlcyBDb25kaXRpb25zIEfDqW7DqXJhbGUgZCdVdGlsaXNhdGlvbjwvYT4gZHUgc2l0ZSAocmVxdWlzKS5cIixcbiAgICBmb3Jtc1N1Ym1pdFR4dDogXCJKZSBtJ2Fib25uZSAhXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgXFxcInBhcnJhaW5cXFwiIGEgYmllbiDDqXTDqSB0cm91dsOpLiBDZXR0ZSBwZXJzb25uZSBzZXJhIGF2ZXJ0aWUgcXVlIHZvdXMgbCdhdmV6IGTDqXNpZ27DqWUuXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiRMOpc29sw6kgbWFpcyBhdWN1biB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNlIGNvZGUgLyBlLW1haWwgZGUgcGFycmFpbmFnZSA6KFwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVscyA6IFwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NVc2VyTmJHb2RDaGlsZHM6IFwiVm9pY2kgbGVzICNOQiB1dGlsaXNhdGV1cihzKSBpbnNjcml0KHMpIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIgOiBcIixcbiAgICBpbmZvc1VzZXJOb0dvZGNoaWxkczogXCJQb3VyIGwnaW5zdGFudCwgYXVjdW5lIHBlcnNvbm5lIG5lIHMnZXN0IGluc2NyaXRlLCBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiLlwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBhIGV4cGlyw6kuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCAqVElNSU5HKiAhXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjxicj5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLjwvcD48cD5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuU2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy5cXG5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlLW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+Ljxicj5FbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb25cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtUeHQgOiBcIlZhbGlkZXIgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0IEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkJ8OqdHJlIGVudm95w6kgw6Agdm90cmUgYWRyZXNzZSBlLW1haWwgKCNFTUFJTCkuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgITxicj48YnI+U2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIDxiPkVNQUlMPC9iPi48YnI+PGJyPkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIDxiPkVNQUlMPC9iPiDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyA8Yj5wb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT48L2I+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuPGJyPjxicj5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIGNpLWRlc3NvdXMuPGJyPjxicj7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuXFxuXFxuUG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBzdWl2YW50IDogTElOS19VUkxcXG5cXG7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgdW4gc2VydmV1ciBTTVRQIHZhbGlkZS5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiTWVyY2kgZCdhY2NlcHRlciBsZXMgQ0dVIHBvdXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGNvbXB0ZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSBwb3V2b2lyIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBub3V2ZWF1IGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgbGUgcHJlc3NlLXBhcGllciBkZSB2b3RyZSBvcmRpbmF0ZXVyIChvdSBtb2JpbGUpLiBWb3VzIHBvdXZleiBsZSBcXFwiY29sbGVyXFxcIiBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgc2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0OiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJEw6lzb2zDqSBtYWlzIGlsIHkgYSBldSB0cm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdGV6IG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLiBWb3VzIHBvdXZleiB2b3VzIHkgY29ubmVjdGVyIDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBjb21wbMOpdGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgdm90cmUgYWJvbm5lbWVudCBjaS1kZXNzb3VzLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIuKAplwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxuXG4gICAgLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4gICAgLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG4gICAgc3RhdGljIGdldFBhc3N3b3JkIChuYkNhck1pbiwgbmJDYXJNYXgpXG4gICAge1xuICAgICAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgICAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgICAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgICAgICB9XG4gICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICByZXR1cm4gcGFzc3dvcmQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBsaWVucyBkZSBsJ2ludGVyZmFjZVxuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9uc1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIsIHRpdGxlOlwiQWNjw6lkZXIgb3UgY3LDqWV6IHZvdHJlIGNvbXB0ZSBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiLCB0aXRsZTpcIkVuIHNhdm9pciArIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiLCB0aXRsZTpcIlBhZ2UgZCdhY2N1ZWlsXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkxlIGJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiwgdGl0bGU6XCJRdWkgYSBjcsOpw6kgV2lraUxlcm5pID8gUXVlbHMgc29udCB2b3MgZHJvaXRzID9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiLCB0aXRsZTpcIlZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZTogXCJhZG1pbi5odG1sXCIsXG4gICAgY2d1UGFnZTogXCJDR1YtQ0dVLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLCAgICBcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2VUeHQgOiBcIk1hIHBhZ2UgZCdhY2N1ZWlsLlwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgLyogVGV4dGVzIChnw6luw6lyYWwpICovXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbiAgICBsaWNlbmNlVHh0OiBcIkBjb3B5bGVmdCBMZSBjb250ZW51IGRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgP1xcXCI+ZXN0IGxpYnJlPC9hPiBldCB2b3VzIGVzdCBvZmZlcnQgc2FucyBwdWJsaWNpdMOpLiBWb3VzIHBvdXZleiA8YSBocmVmPVxcXCIvcGFydGljaXBlci1maW5hbmNlbWVudC5odG1sXFxcIiB0aXRsZT1cXFwiRmluYW5jZW1lbnQgcGFydGljaXBhdGlmIGF2ZWMgY29udHJlLXBhcnRpZXNcXFwiPnBhcnRpY2lwZXIgw6Agc29uIGZpbmFuY2VtZW50IGVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgLyogUGFnZSBkJ2FjY3VlaWwgKi9cbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiPGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+Ljxicj5Wb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzLCBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLjxicj5EZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgPGI+ZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgY3VsdHVyZSBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBqYXJkaW48L2I+LlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIjxiPlBhcyBkZSBmYWl0cyBhbHRlcm5hdGlmczwvYj4sIHRvdXMgbGVzIGNvbnRlbnVzIHNvbnQgPGI+c291cmPDqXMgcGFyIGRlcyBhcnRpY2xlcyBXaWtpcMOpZGlhPC9iPi48YnI+RXQgdG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwdWJsacOpIHN1ciBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzIHN1ciBjZSBzdWpldFxcXCI+c29udCBwYXJ0YWfDqXMgc291cyBsaWNlbmNlcyBsaWJyZXM8L2E+Ljxicj5MZSB0b3V0IHNhbnMgcHVibGljaXTDqSwgbmkgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzLjxicj48Yj5TdXIgV2lraUxlcm5pLCB2b3VzIGN1bHRpdmV6IHZvdHJlIGphcmRpbiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjwvYj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSA/XCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogIFwiVGVzdGV6IFdpa2lMZXJuaVwiLFxuICAgIGhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZTogIFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIC8qIFBhZ2UgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuLi4gKi8gICBcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIldpa2lMZXJuaSA6IHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiPHA+PGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgcXVlbHF1ZSBjaG9zZSBkZSBub3V2ZWF1PC9iPjxicj5TaSBkZXNzb3VzIGxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4gVm91cyBwb3V2ZXogYXVzc2kgPGEgaHJlZj0nL3F1aXpzL3RoZW1lcy5odG1sJz5wYXJjb3VyaXIgbGUgc2l0ZSBwYXIgdGjDqG1lcyBvdSBtb3RzLWNsw6lzPC9hPi48L3A+XCIsXG4gICAgLyogUGxhbiBkdSBzaXRlLCBsaXN0ZSBkZXMgdGFncyAqLyAgIFxuICAgIHRhZ0xpc3RUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBkZXMgYXJ0aWNsZXMgZXQgcXVpenMgc3VyIGRlIG5vbWJyZXV4IHRow6htZXMgIVwiLFxuICAgIHRhZ0xpc3RNZXRhRGVzYzogXCJXaWtpTGVybmkgOiBkw6ljb3V2cmlyIGxlcyBkaWZmw6lyZW50cyB0aMOobWVzIGFib3Jkw6lzIHBhciBXaWtpTGVybmkuIElueGV4IGR1IHNpdGUuXCIsXG4gICAgdGFnTGlzdEludHJvOiBcIjxoMz5BdmVjIFdpa2lMZXJuaSwgZGV2ZW5leiBmb3J0IGVuIHRow6htZXMuLi4gT3VpIG1haXMgcXVlbHMgdGjDqG1lcyA/IDopPC9oMz48YmxvY2txdW90ZT5BcmlzdG90ZeKArzogwqvigK9M4oCZaG9tbWUgYSBuYXR1cmVsbGVtZW50IGxhIHBhc3Npb24gZGUgY29ubmHDrnRyZeKApuKAr8K7PC9ibG9ja3F1b3RlPlwiLFxuICAgIC8qIFBhZ2UgcXVpenMgKi9cbiAgICBhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQ6IFwiUmVsaXJlXCIsXG4gICAgcXVpekVsZW1lbnRMaW5rc0ludHJvOiBcIkVuIHNhdm9pciBwbHVzXCIsXG4gICAgcXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZTogXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5p4oCvP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIjxwPkxlIHByaW5jaXBlIGVzdCBzaW1wbGXigK86IDxiPnZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpPC9iPi4gUHVpcyB2b3VzIDxiPmFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZTwvYj4uIFN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgPGI+dW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXM8L2I+IGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gQ+KAmWVzdCB0b3Vqb3VycyA8Yj5sZSBjb250ZW51IGRlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pPC9iPiBjb25jZXJuYW50IGxlcyDCq+KAr2Jvbm5lc+KAr8K7IHLDqXBvbnNlcy4gQ+KAmWVzdCB1bmUgZmHDp29uIGRlIHRlc3RlciDDoCBsYSBmb2lzIHZvdHJlIGNhcGFjaXTDqSBk4oCZYXR0ZW50aW9uIGV0IHZvdHJlIG3DqW1vaXJlLiBMZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG7igJlow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPC9wPjxwPjxiPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZOKAmWF1dHJlcyBzb2x1dGlvbnMgcG91ciBhbcOpbGlvcmVyIHZvdHJlIGN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4uIFBvdXIgZW4gc2F2b2lyIHBsdXMsIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBleHBsYW5hdGlvbkVsZW1lbnRUeHQ6IFwiPHA+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBkZSA8Yj5yZWNldm9pciBwYXIgZS1tYWlsIMOgIGxhIGZyw6lxdWVuY2UgY2hvaXNpZSwgZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXM8L2I+IGV0IHBvcnRhbnQgc3VyIGRlcyBzdWpldHMgdHLDqHMgdmFyacOpcyBkZSA8Yj5jdWx0dXJlIGfDqW7DqXJhbGU8L2I+IChhcnRzLCBoaXN0b2lyZSwgbGl0dMOpcmF0dXJlLCBzY2llbmNlcywgZXRjLikuPC9wPjxwPkNlcyBhcnRpY2xlcyBzb250IGJhc8OpcyBzdXIgPGI+dW5lIG91IHBsdXNpZXVycyBwYWdlcyBkZSBXaWtpcMOpZGlhPC9iPiAoZm91cm5pZXMgZW4gbGllbiksIGRvbnQgPGI+aWxzIGV4dHJhaWVudCBjZXJ0YWluZXMgaW5mb3JtYXRpb25zPC9iPi48L3A+PHA+Q2hhcXVlIHPDqXJpZSBk4oCZYXJ0aWNsZXMgZXN0IDxiPnN1aXZpZSBk4oCZdW4gcXVpejwvYj4gcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPC9wPjxwPjxiPlZvdXMgYXBwcmVuZXogYWluc2kgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+IHRyw6hzIHNpbXBsZW1lbnQuPC9wPlwiLFxuICAgIC8qIEF1dHJlcyAqL1xuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICB0d2l0dGVyQWNjb3VudDogXCJXaWtpTGVybmlcIixcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG59OyIsIi8vIC0tIEdFU1RJT04gREVTIEZPUk1VTEFJUkVTIFBFUk1FVFRBTlQgQVVYIFVUSUxJU0FURVVSUyBERSBNRVRUUkUgw4AgSk9VUiBMRVVSUyBJTkZPUk1BVElPTlMgKyBMRVVSIEFCT05ORU1FTlRcblxuLy8vIFbDqXJpZmllciBxdWUgbCd1dGlsaXNhdGV1ciBlc3QgYmllbiBjb25uZWN0w6ksIGEgbGUgYm9uIHN0YXR1dCBldCBsZSByZWRpcmlnZXIgdmVycyBsZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24gc2kgY2Ugbidlc3QgcGFzIGxlIGNhcy5cbi8vLyBTaSBjJ2VzdCBvaywgb24gcsOpY3Vww6hyZSBsZXMgaW5mb3MgZGUgc29uIGNvbXB0ZSBldCBzb24gYWJvbm5lbWVudCBldCBsZXMgYWZmaWNoZSBkYW5zIGxlIGZvcm11bGFpcmUuXG4vLy8gVW5lIGluZm9ybWF0aW9uIGVzdCBhZmZpY2jDqWUgY29uY2VybmFudCBsYSBwb3NzaWJpbGl0w6kgZGUgcGFycmFpbmFnZSBldCBsaXN0ZSBsZXMgZmlsbGV1bHMgZXhpc3RhbnRzLlxuLy8vIFVuIG1lbnUgcGVybWV0IMOgIGwndXRpbGlzYXRldXIgZCdhY2PDqWRlciDDoCBsYSBtb2RpZmljYXRpb24gZGUgc2VzIGluZm9zLCBldGMuXG4vLy8gRGVzIGJvdXRvbnMgZGUgcGFpZW1lbnQgc29udCBhdXNzaSBhZmZpY2jDqXMgc3VpdmFudCBsZSBjaG9peCBkZSBsJ3V0aWxpc2F0ZXVyIHBvdXIgbHVpIHBlcm1ldHRyZSBkZSBwcm9sb25nZXIgc29uIGFib25uZW1lbnQuXG4vLy8gVW4gbWVzc2FnZSB2ZW5hbnQgZCd1bmUgYXV0cmUgcGFnZSBwZXV0IGF1c3NpIMOqdHJlIMOgIGFmZmljaGVyIGxvcnMgZHUgcHJlbWllciBjaGFyZ2VtZW50LlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTsvLyBiZXNvaW4gZGUgdG91dGVzIGxlcyBkw6ljbGFyYXRpb25zIHBvdXIgbGEgZm9uY3Rpb24gOiB1cGRhdGVBY2NvdW50TGluaygpXG5jb25zdCB7IGJlZ2luQ29kZUdvZGZhdGhlciB9ID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZVwiKTtcbmNvbnN0IGNvbmZpZ1VzZXJzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTsgLy8gYmVzb2luIGRlIHRvdXMgbGUgZmljaGllciBwb3VyIGNvbmZpZ3VyZXIgbGUgZm9ybXVsYWlyZVxuXG4vLyBGb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdFxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXREYXRhc0Zyb21JbnB1dHMsIHNldEF0dHJpYnV0ZXNUb0lucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnLCBnZXRUaW1lRGlmZmVyZW5jZSB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIFNww6ljaWZpcXVlIFdlYlBvcnRhZ2UgcG91ciBwYWllbWVudHM6XG5pbXBvcnQgeyBzaG93QnRuUGF5bWVudCwgdW5DaGVja0FsbE90aGVycyB9IGZyb20gXCIuL3Rvb2xzL3dlYnBvcnRhZ2UuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB7IHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IGluZm9zVXNlck5iR29kQ2hpbGRzLCBpbmZvc1VzZXJOb0dvZGNoaWxkcywgbmVlZEJlQ29ubmVjdGVkIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5jb25zdCB7IGluZm9zRXhwaXJhdGVkLCBpbmZvc05iRGF5cyB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9zdWJzY3JpcHRpb25cIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBkaXZDcmFzaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3Jhc2hcIik7XG5jb25zdCBkaXZNYWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZGl2R29kZmF0aGVySW5mb3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvZGZhdGhlckluZm9zXCIpO1xuY29uc3QgZGl2R29kY2hpbGRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnb2RjaGlsZHNcIik7XG5jb25zdCBkaXZTdWJzY3JpYmVJbmZvcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaWJlSW5mb3NcIik7XG5jb25zdCBkaXZTdWJzY3JpYmVJbnRybyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaWJlSW50cm9cIik7XG5jb25zdCBmb3JtQWNjb3VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudFVwZGF0ZVwiKTtcbmNvbnN0IG5ld1Bhc3N3b3JkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXdQYXNzd29yZFwiKTtcbmNvbnN0IHNob3dHRkVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnb2RmYXRoZXJFbWFpbFwiKTtcbmNvbnN0IHNob3dHRkNvZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvZGZhdGhlckNvZGVcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBuJ2VzdCBwYXMgY29ubmVjdMOpIGF2ZWMgbGUgYm9uIHN0YXR1dCwgcGFzIGxhIHBlaW5lIGQnYWxsZXIgKyBsb2luIDpcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKFtcInVzZXJcIl0sIFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IG5lZWRCZUNvbm5lY3RlZCwgY29sb3I6XCJlcnJvclwiIH0sIHdpbmRvdy5sb2NhdGlvbik7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBkaXZNYWluLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgLy8gbCfDqXZlbnR1ZWxsZSBhbmNyZSBlc3QgaWdub3LDqWUsIGNhciBhYnNlbnRlIGR1IERPTSBhdmFudCBkJ2F2b2lyIHbDqXJpZmnDqSBsYSBjb25uZXhpb25cbiAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5oYXNoIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24od2luZG93LmxvY2F0aW9uLmhhc2gpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICAgICAgLy8gSW5pdGlhbGlzZSBsZSBmb3JtdWxhaXJlIHBlcm1ldHRhbnQgZGUgbWV0dHJlIMOgIGpvdXIgbGVzIGluZm9zIDpcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdVc2VycywgZm9ybUFjY291bnQpO1xuICAgICAgICAgICAgLy8gQ2VydGFpbnMgbmF2aWdhdGV1cnMgcmVtcGxpc3NlbnQgbGVzIGNoYW1wcyBwYXNzd29yZCA6XG4gICAgICAgICAgICBuZXdQYXNzd29yZC52YWx1ZT1cIlwiO1xuXG4gICAgICAgICAgICAvLyBGb25jdGlvbiBhZmZpY2hhbnQgbGVzIGluZm9zIGNvbm51ZXMgYXUgcHJlbWllciBhZmZpY2hhZ2UsIHB1aXMgYXByw6hzIGVudm9pIG1pc2Ugw6Agam91clxuICAgICAgICAgICAgY29uc3QgZ2V0SW5mb3MgPSAoKSA9PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhockdldEluZm9zID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyR2V0SW5mb3Mub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5nZXRVc2VySW5mb3MrdXNlci5pZCk7XG4gICAgICAgICAgICAgICAgeGhyR2V0SW5mb3Mub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5Vc2VyICE9IHVuZGVmaW5lZCAmJiByZXNwb25zZS5TdWJzY3JpcHRpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgZGF0YSBpbiByZXNwb25zZS5Vc2VyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybUFjY291bnQuZWxlbWVudHNbZGF0YV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlVzZXJbZGF0YV0hPT10cnVlICYmIHJlc3BvbnNlLlVzZXJbZGF0YV0hPT1mYWxzZSkvLyBib29sw6llbiA9IGNhc2Ugw6AgY29jaGVyICFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5lbGVtZW50c1tkYXRhXS52YWx1ZT1yZXNwb25zZS5Vc2VyW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuVXNlcltkYXRhXT09dHJ1ZSkgLy8gc2kgZmFsc2UsIG9uIG5lIGZhaXQgcmllbiAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5lbGVtZW50c1tcIlwiK2RhdGFdLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gam91cnMgZGUgcsOpY2VwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5TdWJzY3JpcHRpb24ucmVjZWlwdERheXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1BY2NvdW50LmVsZW1lbnRzW1wiZFwiK3Jlc3BvbnNlLlN1YnNjcmlwdGlvbi5yZWNlaXB0RGF5c1tpXV0uY2hlY2tlZD1cImNoZWNrZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcImNvZGVzXCIgcG9zc2libGVzIMOgIHRyYW5zbWV0dHJlIHBvdXIgcGFycmFpbmVyIGQnYXV0cmVzIHV0aWxpc2F0ZXVycyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93R0ZFbWFpbC5pbm5lckhUTUw9cmVzcG9uc2UuVXNlci5lbWFpbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93R0ZDb2RlLmlubmVySFRNTD1iZWdpbkNvZGVHb2RmYXRoZXIrcmVzcG9uc2UuVXNlci5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZ2luU3ViVFM9bmV3IERhdGUocmVzcG9uc2UuU3Vic2NyaXB0aW9uLmNyZWF0ZWRBdCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuU3Vic2NyaXB0aW9uLm51bWJlck9mRGF5cyAhPT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZHb2RmYXRoZXJJbmZvcy5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZTdWJzY3JpYmVJbmZvcy5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYkRheXNPaz1yZXNwb25zZS5TdWJzY3JpcHRpb24ubnVtYmVyT2ZEYXlzLU1hdGgucm91bmQoKERhdGUubm93KCktYmVnaW5TdWJUUykvMTAwMC8zNjAwLzI0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuYkRheXNPayA+IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U3Vic2NyaWJlSW50cm8sIFwicFwiLCBpbmZvc05iRGF5cy5yZXBsYWNlKFwiTkJfREFZU1wiLCBuYkRheXNPayksIFwiXCIsIFtcImluZm9cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U3Vic2NyaWJlSW50cm8sIFwicFwiLCBpbmZvc0V4cGlyYXRlZC5yZXBsYWNlKFwiTkJfREFZU1wiLCBuYkRheXNPayksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNzdWJzY3JpYmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW9udGUgbGVzIGluZm9zIGTDqWrDoCBlbnJlZ2lzdHLDqWVzIDpcbiAgICAgICAgICAgIGdldEluZm9zKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgICAvLyBUcmFpdGVtZW50IGRlIGwnZW52b2kgZCd1bmUgbWlzZSDDoCBqb3VyIGRlcyBpbmZvc1xuICAgICAgICAgICAgZm9ybUFjY291bnQuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1BY2NvdW50KTtcbiAgICAgICAgICAgICAgICAvLyByZWNvbXBvc2l0aW9uIGRlcyBqb3VycyB2YWxhYmxlcyBwb3VyIGwnYWJvbm5lbWVudCA6XG4gICAgICAgICAgICAgICAgZGF0YXMucmVjZWlwdERheXM9XCJcIjtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGk9MTsgaTw9NzsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXNbXCJkXCIraV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cys9XCJcIitpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhcy50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHhoclVzZXJVcGRhdGUgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhcy5kZWxldGVPayE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK1wiL1wiK3VzZXIuaWQpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLnVwZGF0ZVVzZXJJbmZvcyt1c2VyLmlkKTtcbiAgICAgICAgICAgICAgICB4aHJVc2VyVXBkYXRlLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGFucyB0b3VzIGxlcyBjYXMsIGplIG1ldHMgw6Agam91ciBsZSBjb250ZW51IGR1IGZvcm11bGFpcmUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW5mb3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJVc2VyVXBkYXRlLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhcy5vdXRwdXQ9XCJodG1sXCI7XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBvbiBwYXNzZSDDoCBsYSBjYWlzc2UgP1xuICAgICAgICAgICAgY29uc3QgYWJvOT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzlcIik7XG4gICAgICAgICAgICBjb25zdCBhYm8xOD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzE4XCIpO1xuICAgICAgICAgICAgY29uc3QgYWJvMzY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8zNlwiKTtcbiAgICAgICAgICAgIGNvbnN0IGFibzU0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvNTRcIik7XG4gICAgICAgICAgICBjb25zdCBDR1Y9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJDR1ZPa1wiKTtcbiAgICAgICAgICAgIGNvbnN0IGRpdldQQnRucz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuc1wiKTtcbiAgICAgICAgICAgIGRpdldQQnRucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgYWJvOS5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdW5DaGVja0FsbE90aGVycyhcImFibzlcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFibzE4LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvMThcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFibzM2LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvMzZcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGFibzU0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvNTRcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIENHVi5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYoQ0dWLmNoZWNrZWQ9PT10cnVlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGl2V1BCdG5zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICBpZihhYm85LmNoZWNrZWQ9PT10cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0J0blBheW1lbnQoXCJidG45XCIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGFibzE4LmNoZWNrZWQ9PT10cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0J0blBheW1lbnQoXCJidG4xOFwiKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihhYm8zNi5jaGVja2VkPT09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCdG5QYXltZW50KFwiYnRuMzZcIik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYWJvNTQuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QnRuUGF5bWVudChcImJ0bjU0XCIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdldQQnRucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgQ0dWLmNoZWNrZWQ9ZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBkaXZXUEJ0bnMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBMaXN0ZSBkZXMgZmlsbGV1bHMsIHNpIGlsIHkgZW4gYVxuICAgICAgICAgICAgY29uc3QgeGhyR2V0R29kY2hpbGRzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5nZXRHb2RDaGlsZHMpO1xuICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCksIHR4dEdvZGNoaWxkcz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmJHb2RjaGlsZHM9cmVzcG9uc2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYobmJHb2RjaGlsZHM9PT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dEdvZGNoaWxkcz1pbmZvc1VzZXJOb0dvZGNoaWxkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRHb2RjaGlsZHM9aW5mb3NVc2VyTmJHb2RDaGlsZHMucmVwbGFjZShcIiNOQlwiLCBuYkdvZGNoaWxkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRHb2RjaGlsZHMrPXJlc3BvbnNlW2ldLm5hbWUrXCIgKFwiK3Jlc3BvbnNlW2ldLmVtYWlsK1wiKSBcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdkdvZGNoaWxkcywgXCJwXCIsIHR4dEdvZGNoaWxkcywgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgIHhockdldEdvZGNoaWxkcy5zZW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2Q3Jhc2gsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXogb3UgZCd1biBncm91cGUgZGUgcXVpenNcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICAgICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkYXRhcy5Hcm91cElkPWFuc3dlci5Hcm91cElkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iLCJjb25zdCBjaGVja0JveGVzPVxue1xuICAgIFwiQ0dWXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkNHVk9rXCIpLFxuICAgIFwiYWJvMVwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8xXCIpLFxuICAgIFwiYWJvMlwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8yXCIpLFxuICAgIFwiYWJvM1wiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8zXCIpLFxuICAgIFwiYWJvNFwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm80XCIpXG59XG5jb25zdCBkaXZXUEJ0bnM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bnNcIik7XG5cbi8vIExvcnNxdWUgbCdvbiBzw6lsZWN0aW9ubmUgdW4gbW9udGFudCwgbGVzIGF1dHJlcyBvcHRpb25zICsgbGVzIENHViBzb250IGTDqXPDqWxlY3Rpb25uw6lzXG5leHBvcnQgY29uc3QgdW5DaGVja0FsbE90aGVycyA9IChjaG9pY2UpID0+XG57XG4gICAgZm9yIChsZXQgaWQgaW4gY2hlY2tCb3hlcylcbiAgICB7XG4gICAgICAgIGlmKGlkIT09Y2hvaWNlKVxuICAgICAgICAgICAgY2hlY2tCb3hlc1tpZF0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZGl2V1BCdG5zLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgfVxufVxuXG5cbmNvbnN0IGJ0bnM9XG57XG4gICAgXCJidG4xXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuMVwiKSxcbiAgICBcImJ0bjJcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG4yXCIpLFxuICAgIFwiYnRuM1wiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bjNcIiksXG4gICAgXCJidG40XCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuNFwiKVxufVxuXG4vLyBBZmZpY2hlIGxlIGJvbiBib3V0b24gZGUgcGFpZW1lbnQgZXQgY2FjaGUgbGVzIGF1dHJlc1xuZXhwb3J0IGNvbnN0IHNob3dCdG5QYXltZW50ID0gKGNob2ljZSkgPT5cbntcbiAgICBmb3IgKGxldCBpZCBpbiBidG5zKVxuICAgIHtcbiAgICAgICAgaWYoaWQhPT1jaG9pY2UpXG4gICAgICAgICAgICBidG5zW2lkXS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBidG5zW2lkXS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICB9XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FjY291bnRVc2VyLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvd2VicG9ydGFnZS5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIiwiaW5mb3NFeHBpcmF0ZWQiLCJpbmZvc0V4cGlyYXRlZEFkbWluIiwiaW5mb3NOYkRheXMiLCJpbmZvc05iRGF5c0FkbWluIiwiaW5mb3NQYXltZW50c0FkbWluIiwiaXNOb3RWYWxpZGVkIiwibWFpbEVuZEZyZWVUaW1lQm9keUhUTUwiLCJtYWlsRW5kRnJlZVRpbWVCb2R5VHh0IiwibWFpbEVuZEZyZWVUaW1lTGlua1R4dCIsIm1haWxFbmRGcmVlVGltZU1lc3NhZ2UiLCJtYWlsRW5kRnJlZVRpbWVTdWJqZWN0IiwibWFpbEV4cGlyYXRpb25Cb2R5SFRNTCIsIm1haWxFeHBpcmF0aW9uQm9keVR4dCIsIm1haWxFeHBpcmF0aW9uTGlua1R4dCIsIm1haWxFeHBpcmF0aW9uTWVzc2FnZSIsIm1haWxFeHBpcmF0aW9uUmVsYXVuY2hUeHQiLCJtYWlsRXhwaXJhdGlvblN1YmplY3QiLCJtYWlsTmV3RWxlbWVudEZvckdyb3VwVHh0IiwibWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5VHh0IiwibWFpbFN0b3BNYWlsTGlua1R4dCIsIm5lZWRLbm93SWZOb3RpY2VPayIsIm5lZWRJbnRlZ2VyTnVtYmVyT2ZEYXlzIiwibmVlZE1pbk51bWJlck9mRGF5cyIsIm5lZWROb3RUb29Mb25nRGF5c0xpc3QiLCJuZWVkTnVtYmVyT2ZEYXlzIiwibmVlZFVuaXF1ZURheXNMaXN0IiwibmVlZFZhbGlkRGF5c0xpc3QiLCJub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIiwidW5zdWJzY3JpcHRpb25PayIsInVuc3Vic2NyaXB0aW9uRmFpbCIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJjb25maWdVc2VycyIsImRpdkNyYXNoIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1haW4iLCJkaXZNZXNzYWdlIiwiZGl2UmVzcG9uc2UiLCJkaXZHb2RmYXRoZXJJbmZvcyIsImRpdkdvZGNoaWxkcyIsImRpdlN1YnNjcmliZUluZm9zIiwiZGl2U3Vic2NyaWJlSW50cm8iLCJmb3JtQWNjb3VudCIsInNob3dHRkVtYWlsIiwic2hvd0dGQ29kZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImlzQ29ubmVjdGVkIiwiY2hlY2tTZXNzaW9uIiwibWVzc2FnZSIsImNvbG9yIiwid2luZG93IiwibG9jYXRpb24iLCJzdHlsZSIsImRpc3BsYXkiLCJoYXNoIiwiYXNzaWduIiwiZ2V0TG9jYWx5IiwiYWRkRWxlbWVudCIsInJlbW92ZUxvY2FseSIsInVzZXIiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsImdldEluZm9zIiwieGhyR2V0SW5mb3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwiVXNlciIsIlN1YnNjcmlwdGlvbiIsImRhdGEiLCJlbGVtZW50cyIsImNoZWNrZWQiLCJyZWNlaXB0RGF5cyIsImlubmVySFRNTCIsImJlZ2luU3ViVFMiLCJjcmVhdGVkQXQiLCJnZXRUaW1lIiwibnVtYmVyT2ZEYXlzIiwibmJEYXlzT2siLCJyb3VuZCIsIm5vdyIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInNlbmQiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ0aW1lRGlmZmVyZW5jZSIsImdldFRpbWVEaWZmZXJlbmNlIiwieGhyVXNlclVwZGF0ZSIsImRlbGV0ZU9rIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwib3V0cHV0Iiwic3RyaW5naWZ5IiwiYWJvOSIsImFibzE4IiwiYWJvMzYiLCJhYm81NCIsIkNHViIsImRpdldQQnRucyIsInVuQ2hlY2tBbGxPdGhlcnMiLCJzaG93QnRuUGF5bWVudCIsInhockdldEdvZGNoaWxkcyIsInR4dEdvZGNoaWxkcyIsIm5iR29kY2hpbGRzIiwiY29uc29sZSIsImVycm9yIiwic2F2ZUxvY2FseSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImxvZyIsImxpbmsiLCJob21lUGFnZSIsImlucHV0c0NvbmYiLCJteUZvcm0iLCJpZElucHV0IiwiaW5wdXRIVE1MIiwiYXR0cmlidXRlIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImVudHJpZSIsImVudHJpZXMiLCJlbXB5Rm9ybSIsInR5cGUiLCJlbXB5QW5kSGlkZUZvcm0iLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwiY2hlY2tCb3hlcyIsImNob2ljZSIsImJ0bnMiXSwibWFwcGluZ3Mi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IGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9hY2NvdW50VXNlci5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvc3Vic2NyaXB0aW9uXCI6IFwiLi4vbGFuZy9mci9zdWJzY3JpcHRpb24uanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9zdWJzY3JpcHRpb24kXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhbGxTdWJzY3JpcHRpb25Qcm9jZXNzZWQgOiBcIlRvdXMgbGVzIGFib25uw6lzIG9udCDDqXTDqSB0cmFpdMOpcyBwb3VyIGxlIG1vbWVudC5cIixcbiAgICBpbmZvc0V4cGlyYXRlZDogXCJWb3RyZSBhYm9ubmVtZW50IGEgZXhwaXLDqSwgbWFpcyBpbCB2b3VzIHJlc3RlIGVuY29yZSBxdWVscXVlcyBqb3VycyBhdmFudCBxdWUgdm90cmUgY29tcHRlIGV0IHZvcyBkb25uw6llcyBuZSBzb2llbnQgY29tcGzDqHRlbWVudCBzdXBwcmltw6llcy48YnI+UG91ciBjZSBmYWlyZSwgc3VpdmV6IHNhbnMgdGFyZGVyIGxlcyBpbmRpY2F0aW9ucyBjaS1kZXNzb3VzIDpcIixcbiAgICBpbmZvc0V4cGlyYXRlZEFkbWluOiBcIkNldCBhYm9ubmVtZW50IGEgZXhwaXLDqS5cIixcbiAgICBpbmZvc05iRGF5czogXCJWb3RyZSBhYm9ubmVtZW50IGVzdCBlbmNvcmUgdmFsYWJsZSA8Yj5wZW5kYW50IE5CX0RBWVMgam91cnM8L2I+Ljxicj5Wb3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCBwcm9sb25nZXIgdm90cmUgYWJvbm5lbWVudCBlbiBzdWl2YW50IGxlcyBpbmRpY2F0aW9ucyBjaS1kZXNzb3VzIDpcIixcbiAgICBpbmZvc05iRGF5c0FkbWluOiBcIkNldCBhYm9ubmVtZW50IGVzdCBlbmNvcmUgdmFsYWJsZSA8Yj5wZW5kYW50IE5CX0RBWVMgam91cnM8L2I+LlwiLFxuICAgIGluZm9zUGF5bWVudHNBZG1pbiA6IFwiREFURV9QQVlNRU5UIDogcGFpZW1lbnQgZGUgQU1PVU5UIOKCrCBhdSBub20gZGUgQ0xJRU5UX05BTUUuXCIsXG4gICAgaXNOb3RWYWxpZGVkIDogXCJDZXQgdXRpbGlzYXRldXIgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLjxicj5Wb3VzIHBvdXZleiBsZSBmYWlyZSDDoCBzYSBwbGFjZSA8YSBocmVmPScjdmFsaWRhdGlvbk9rJz5lbiBjb2NoYW50IGxhIGNhc2UgaW5kaXF1w6llPC9hPiBldCBlbnJlZ2lzdHJhbnQuXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lQm9keUhUTUw6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLjxicj48YnI+UG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogc291c2NyaXJlIMOgIHVuIGFib25uZW1lbnQgc2FucyB0YXJkZXIgZW4gY2xpcXVhbnQgc3VyIGxlIGxpZW4gY2ktZGVzc291cy48L3A+XCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lQm9keVR4dDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuXFxuXFxuUG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogc2FucyBhdHRlbmRyZSBzb3VzY3JpcmUgw6AgdW4gYWJvbm5lbWVudCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRW5kRnJlZVRpbWVMaW5rVHh0IDogXCJNJ2Fib25uZXIuXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lTWVzc2FnZTogXCIgcmVsYW5jZXMgZW52b3nDqWVzLlwiLFxuICAgIG1haWxFbmRGcmVlVGltZVN1YmplY3Q6IFwiVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IHZhIGV4cGlyZXJcIixcbiAgICBtYWlsRXhwaXJhdGlvbkJvZHlIVE1MOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIGFib25uZW1lbnQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuPGJyPjxicj5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBTSVRFX05BTUUsIHZvdXMgcG91dmV6IGxlIHByb2xvbmdlciBkw6hzIGF1am91cmQnaHVpIGVuIGNsaXF1YW50IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIG1haWxFeHBpcmF0aW9uQm9keVR4dDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3RyZSBhYm9ubmVtZW50IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLlxcblxcblBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIFNJVEVfTkFNRSwgdm91cyBwb3V2ZXogbGUgcHJvbG9uZ2VyIGTDqHMgYXVqb3VyZCdodWkgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbEV4cGlyYXRpb25MaW5rVHh0IDogXCJQcm9sb25nZXIgbW9uIGFib25uZW1lbnQuXCIsXG4gICAgbWFpbEV4cGlyYXRpb25NZXNzYWdlOiBcIkZJUlNUIHByZW1pw6hyZXMgZXQgU0VDT05EIGRldXhpw6htZXMgcmVsYW5jZXMgZW52b3nDqWVzIHBvdXIgZGVzIGFib25uZW1lbnRzIGV4cGlyYW50IGQnaWNpIHBldS5cIixcbiAgICBtYWlsRXhwaXJhdGlvblJlbGF1bmNoVHh0OiBcIltSYXBwZWxdIFwiLFxuICAgIG1haWxFeHBpcmF0aW9uU3ViamVjdDogXCJWb3RyZSBhYm9ubmVtZW50IHZhIGJpZW50w7R0IGV4cGlyZXJcIixcbiAgICBtYWlsTmV3RWxlbWVudEZvckdyb3VwVHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb2ljaSBsZSBsaWVuIHZlcnMgbGUgbm91dmVsIGFydGljbGUgw6AgbGlyZSA6XFxuXFxuUVVFU1RJT05OQUlSRV9VUkxcXG5cXG5Cb25uZSBsZWN0dXJlICFcXG5cXG5TdG9wcGVyIGxlcyBlbnZvaXMgP1xcblVOU1VCU0NSSUJFX1VSTFwiLFxuICAgIG1haWxOZXdRdWVzdGlvbm5haXJlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm9pY2kgbGUgbGllbiB2ZXJzIGxlIG5vdXZlYXUgcXVpeiA6XFxuXFxuUVVFU1RJT05OQUlSRV9VUkxcXG5cXG5Cb25uZSBsZWN0dXJlICFcXG5cXG5TdG9wcGVyIGxlcyBlbnZvaXMgP1xcblVOU1VCU0NSSUJFX1VSTFwiLFxuICAgIG1haWxTdG9wTWFpbExpbmtUeHQgOiBcIlN0b3BwZXIgbGVzIGVudm9pcy5cIixcbiAgICBuZWVkS25vd0lmTm90aWNlT2sgOiBcIklsIG1hbnF1ZSBsJ2luZm9ybWF0aW9uIHN1ciBsJ2FjY2VwdGF0aW9uIG91IG5vbiBkZSByZWNldm9pciBkZXMgbm90aWZpY2F0aW9ucy5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlck9mRGF5cyA6IFwiTGUgbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudCBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIuXCIsXG4gICAgbmVlZE1pbk51bWJlck9mRGF5cyA6IFwiTGUgbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudCBuZSBwZXV0IMOqdHJlIG7DqWdhdGlmICFcIixcbiAgICBuZWVkTm90VG9vTG9uZ0RheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQgKHRyb3AgbG9uZ3VlKS5cIixcbiAgICBuZWVkTnVtYmVyT2ZEYXlzIDogXCJJbCBmYXV0IHVuIG5vbWJyZSBkZSBqb3VycyBwb3VyIGwnYWJvbm5lbWVudC5cIixcbiAgICBuZWVkVW5pcXVlRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdC4gRG91YmxvbiA6IFwiLFxuICAgIG5lZWRWYWxpZERheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQuIENhcmFjdMOocmUgbm9uIHZhbGlkZSA6IFwiLFxuICAgIG5vTmV3UXVlc3Rpb25uYWlyZUZvclVzZXIgOiBcIkF1Y3VuIG5vdXZlYXUgcXVlc3Rpb25uYWlyZSB0cm91dsOpIHBvdXIgdW4gYWJvbm7DqSA6IFwiLFxuICAgIHVuc3Vic2NyaXB0aW9uT2sgOiBcIlZvdHJlIGRlbWFuZGUgYSBiaWVuIMOpdMOpIHByaXNlIGVuIGNvbXB0ZS4gVm91cyBuZSByZWNldnJleiBwbHVzIGRlIG1lc3NhZ2VzIHZlbmFudCBkdSBzaXRlLCBzYXVmIHBvdXIgdm91cyBzaWduYWxlciBsYSBmaW4gZGUgdm90cmUgYWJvbm5lbWVudC48YnI+Tidow6lzaXRleiBwYXMgPGEgaHJlZj0nLyNVUkwnPsOgIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZTwvYT4gcG91ciBkZSBub3V2ZWF1IGF1dG9yaXNlciBjZXJ0YWlucyBlbnZvaXMuXCIsXG4gICAgdW5zdWJzY3JpcHRpb25GYWlsIDogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBsaWVuIGRlIGTDqXNhYm9ubmVtZW50IG5lIGZvbmN0aW9ubmUgcGFzLjxicj5Wb3VzIHBvdXZleiA8YSBocmVmPScvI1VSTCc+YWNjw6lkZXIgw6Agdm90cmUgY29tcHRlPC9hPiBwb3VyIGTDqXNhY3RpdmVyIGxlcyBlbnZvaXMgbWFudWVsbGVtZW50LlwiXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gR0VTVElPTiBERVMgRk9STVVMQUlSRVMgUEVSTUVUVEFOVCBBVVggVVRJTElTQVRFVVJTIERFIE1FVFRSRSDDgCBKT1VSIExFVVJTIElORk9STUFUSU9OUyArIExFVVIgQUJPTk5FTUVOVFxuXG4vLy8gVsOpcmlmaWVyIHF1ZSBsJ3V0aWxpc2F0ZXVyIGVzdCBiaWVuIGNvbm5lY3TDqSwgYSBsZSBib24gc3RhdHV0IGV0IGxlIHJlZGlyaWdlciB2ZXJzIGxlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbiBzaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLlxuLy8vIFNpIGMnZXN0IG9rLCBvbiByw6ljdXDDqHJlIGxlcyBpbmZvcyBkZSBzb24gY29tcHRlIGV0IHNvbiBhYm9ubmVtZW50IGV0IGxlcyBhZmZpY2hlIGRhbnMgbGUgZm9ybXVsYWlyZS5cbi8vLyBVbmUgaW5mb3JtYXRpb24gZXN0IGFmZmljaMOpZSBjb25jZXJuYW50IGxhIHBvc3NpYmlsaXTDqSBkZSBwYXJyYWluYWdlIGV0IGxpc3RlIGxlcyBmaWxsZXVscyBleGlzdGFudHMuXG4vLy8gVW4gbWVudSBwZXJtZXQgw6AgbCd1dGlsaXNhdGV1ciBkJ2FjY8OpZGVyIMOgIGxhIG1vZGlmaWNhdGlvbiBkZSBzZXMgaW5mb3MsIGV0Yy5cbi8vLyBEZXMgYm91dG9ucyBkZSBwYWllbWVudCBzb250IGF1c3NpIGFmZmljaMOpcyBzdWl2YW50IGxlIGNob2l4IGRlIGwndXRpbGlzYXRldXIgcG91ciBsdWkgcGVybWV0dHJlIGRlIHByb2xvbmdlciBzb24gYWJvbm5lbWVudC5cbi8vLyBVbiBtZXNzYWdlIHZlbmFudCBkJ3VuZSBhdXRyZSBwYWdlIHBldXQgYXVzc2kgw6p0cmUgw6AgYWZmaWNoZXIgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpOy8vIGJlc29pbiBkZSB0b3V0ZXMgbGVzIGTDqWNsYXJhdGlvbnMgcG91ciBsYSBmb25jdGlvbiA6IHVwZGF0ZUFjY291bnRMaW5rKClcbmNvbnN0IHsgYmVnaW5Db2RlR29kZmF0aGVyIH0gPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL2luc3RhbmNlXCIpO1xuY29uc3QgY29uZmlnVXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL3VzZXJzXCIpOyAvLyBiZXNvaW4gZGUgdG91cyBsZSBmaWNoaWVyIHBvdXIgY29uZmlndXJlciBsZSBmb3JtdWxhaXJlXG5cbi8vIEZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldERhdGFzRnJvbUlucHV0cywgc2V0QXR0cmlidXRlc1RvSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcsIGdldFRpbWVEaWZmZXJlbmNlIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gU3DDqWNpZmlxdWUgV2ViUG9ydGFnZSBwb3VyIHBhaWVtZW50czpcbmltcG9ydCB7IHNob3dCdG5QYXltZW50LCB1bkNoZWNrQWxsT3RoZXJzIH0gZnJvbSBcIi4vdG9vbHMvd2VicG9ydGFnZS5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHsgc2VydmVyRXJyb3IgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHsgaW5mb3NVc2VyTmJHb2RDaGlsZHMsIGluZm9zVXNlck5vR29kY2hpbGRzLCBuZWVkQmVDb25uZWN0ZWQgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcbmNvbnN0IHsgaW5mb3NFeHBpcmF0ZWQsIGluZm9zTmJEYXlzIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3N1YnNjcmlwdGlvblwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGRpdkNyYXNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmFzaFwiKTtcbmNvbnN0IGRpdk1haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4tY29udGVudFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5jb25zdCBkaXZHb2RmYXRoZXJJbmZvcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ29kZmF0aGVySW5mb3NcIik7XG5jb25zdCBkaXZHb2RjaGlsZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvZGNoaWxkc1wiKTtcbmNvbnN0IGRpdlN1YnNjcmliZUluZm9zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdWJzY3JpYmVJbmZvc1wiKTtcbmNvbnN0IGRpdlN1YnNjcmliZUludHJvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdWJzY3JpYmVJbnRyb1wiKTtcbmNvbnN0IGZvcm1BY2NvdW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50VXBkYXRlXCIpO1xuY29uc3QgbmV3UGFzc3dvcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5ld1Bhc3N3b3JkXCIpO1xuY29uc3Qgc2hvd0dGRW1haWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvZGZhdGhlckVtYWlsXCIpO1xuY29uc3Qgc2hvd0dGQ29kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ29kZmF0aGVyQ29kZVwiKTtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIG4nZXN0IHBhcyBjb25uZWN0w6kgYXZlYyBsZSBib24gc3RhdHV0LCBwYXMgbGEgcGVpbmUgZCdhbGxlciArIGxvaW4gOlxuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1widXNlclwiXSwgXCIvXCIrY29uZmlnVGVtcGxhdGUuY29ubmVjdGlvblBhZ2UsIHsgbWVzc2FnZTogbmVlZEJlQ29ubmVjdGVkLCBjb2xvcjpcImVycm9yXCIgfSwgd2luZG93LmxvY2F0aW9uKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpdk1haW4uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAvLyBsJ8OpdmVudHVlbGxlIGFuY3JlIGVzdCBpZ25vcsOpZSwgY2FyIGFic2VudGUgZHUgRE9NIGF2YW50IGQnYXZvaXIgdsOpcmlmacOpIGxhIGNvbm5leGlvblxuICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhhc2ghPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih3aW5kb3cubG9jYXRpb24uaGFzaCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGdldExvY2FseShcIm1lc3NhZ2VcIikpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIGdldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkubWVzc2FnZSwgXCJcIiwgW2dldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkuY29sb3JdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdUZW1wbGF0ZSk7XG4gICAgICAgICAgICAvLyBJbml0aWFsaXNlIGxlIGZvcm11bGFpcmUgcGVybWV0dGFudCBkZSBtZXR0cmUgw6Agam91ciBsZXMgaW5mb3MgOlxuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1VzZXJzLCBmb3JtQWNjb3VudCk7XG4gICAgICAgICAgICAvLyBDZXJ0YWlucyBuYXZpZ2F0ZXVycyByZW1wbGlzc2VudCBsZXMgY2hhbXBzIHBhc3N3b3JkIDpcbiAgICAgICAgICAgIG5ld1Bhc3N3b3JkLnZhbHVlPVwiXCI7XG5cbiAgICAgICAgICAgIC8vIEZvbmN0aW9uIGFmZmljaGFudCBsZXMgaW5mb3MgY29ubnVlcyBhdSBwcmVtaWVyIGFmZmljaGFnZSwgcHVpcyBhcHLDqHMgZW52b2kgbWlzZSDDoCBqb3VyXG4gICAgICAgICAgICBjb25zdCBnZXRJbmZvcyA9ICgpID0+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyR2V0SW5mb3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLmdldFVzZXJJbmZvcyt1c2VyLmlkKTtcbiAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLlVzZXIgIT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLlN1YnNjcmlwdGlvbiAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIHJlc3BvbnNlLlVzZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmb3JtQWNjb3VudC5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuVXNlcltkYXRhXSE9PXRydWUgJiYgcmVzcG9uc2UuVXNlcltkYXRhXSE9PWZhbHNlKS8vIGJvb2zDqWVuID0gY2FzZSDDoCBjb2NoZXIgIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1BY2NvdW50LmVsZW1lbnRzW2RhdGFdLnZhbHVlPXJlc3BvbnNlLlVzZXJbZGF0YV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5Vc2VyW2RhdGFdPT10cnVlKSAvLyBzaSBmYWxzZSwgb24gbmUgZmFpdCByaWVuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1BY2NvdW50LmVsZW1lbnRzW1wiXCIrZGF0YV0uY2hlY2tlZD1cImNoZWNrZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqb3VycyBkZSByw6ljZXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5yZWNlaXB0RGF5cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUFjY291bnQuZWxlbWVudHNbXCJkXCIrcmVzcG9uc2UuU3Vic2NyaXB0aW9uLnJlY2VpcHREYXlzW2ldXS5jaGVja2VkPVwiY2hlY2tlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFwiY29kZXNcIiBwb3NzaWJsZXMgw6AgdHJhbnNtZXR0cmUgcG91ciBwYXJyYWluZXIgZCdhdXRyZXMgdXRpbGlzYXRldXJzIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dHRkVtYWlsLmlubmVySFRNTD1yZXNwb25zZS5Vc2VyLmVtYWlsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dHRkNvZGUuaW5uZXJIVE1MPWJlZ2luQ29kZUdvZGZhdGhlcityZXNwb25zZS5Vc2VyLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVnaW5TdWJUUz1uZXcgRGF0ZShyZXNwb25zZS5TdWJzY3JpcHRpb24uY3JlYXRlZEF0KS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5TdWJzY3JpcHRpb24ubnVtYmVyT2ZEYXlzICE9PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdkdvZGZhdGhlckluZm9zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlN1YnNjcmliZUluZm9zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5iRGF5c09rPXJlc3BvbnNlLlN1YnNjcmlwdGlvbi5udW1iZXJPZkRheXMtTWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1iZWdpblN1YlRTKS8xMDAwLzM2MDAvMjQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5iRGF5c09rID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTdWJzY3JpYmVJbnRybywgXCJwXCIsIGluZm9zTmJEYXlzLnJlcGxhY2UoXCJOQl9EQVlTXCIsIG5iRGF5c09rKSwgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTdWJzY3JpYmVJbnRybywgXCJwXCIsIGluZm9zRXhwaXJhdGVkLnJlcGxhY2UoXCJOQl9EQVlTXCIsIG5iRGF5c09rKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3N1YnNjcmliZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyR2V0SW5mb3Muc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyR2V0SW5mb3Muc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb250ZSBsZXMgaW5mb3MgZMOpasOgIGVucmVnaXN0csOpZXMgOlxuICAgICAgICAgICAgZ2V0SW5mb3MoKTtcbiAgICAgICAgICBcbiAgICAgICAgICAgIC8vIFRyYWl0ZW1lbnQgZGUgbCdlbnZvaSBkJ3VuZSBtaXNlIMOgIGpvdXIgZGVzIGluZm9zXG4gICAgICAgICAgICBmb3JtQWNjb3VudC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybUFjY291bnQpO1xuICAgICAgICAgICAgICAgIC8vIHJlY29tcG9zaXRpb24gZGVzIGpvdXJzIHZhbGFibGVzIHBvdXIgbCdhYm9ubmVtZW50IDpcbiAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cz1cIlwiO1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0xOyBpPD03OyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhc1tcImRcIitpXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzLnJlY2VpcHREYXlzKz1cIlwiK2k7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGFzLnRpbWVEaWZmZXJlbmNlPWdldFRpbWVEaWZmZXJlbmNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyVXNlclVwZGF0ZSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFzLmRlbGV0ZU9rIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB4aHJVc2VyVXBkYXRlLm9wZW4oXCJERUxFVEVcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrXCIvXCIrdXNlci5pZCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB4aHJVc2VyVXBkYXRlLm9wZW4oXCJQVVRcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrY29uZmlnVXNlcnMudXBkYXRlVXNlckluZm9zK3VzZXIuaWQpO1xuICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSBzZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkYW5zIHRvdXMgbGVzIGNhcywgamUgbWV0cyDDoCBqb3VyIGxlIGNvbnRlbnUgZHUgZm9ybXVsYWlyZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJbmZvcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzLm91dHB1dD1cImh0bWxcIjtcbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIG9uIHBhc3NlIMOgIGxhIGNhaXNzZSA/XG4gICAgICAgICAgICBjb25zdCBhYm85PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvOVwiKTtcbiAgICAgICAgICAgIGNvbnN0IGFibzE4PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvMThcIik7XG4gICAgICAgICAgICBjb25zdCBhYm8zNj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzM2XCIpO1xuICAgICAgICAgICAgY29uc3QgYWJvNTQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm81NFwiKTtcbiAgICAgICAgICAgIGNvbnN0IENHVj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkNHVk9rXCIpO1xuICAgICAgICAgICAgY29uc3QgZGl2V1BCdG5zPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG5zXCIpO1xuICAgICAgICAgICAgZGl2V1BCdG5zLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICBhYm85LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvOVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWJvMTguYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuQ2hlY2tBbGxPdGhlcnMoXCJhYm8xOFwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWJvMzYuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuQ2hlY2tBbGxPdGhlcnMoXCJhYm8zNlwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYWJvNTQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHVuQ2hlY2tBbGxPdGhlcnMoXCJhYm81NFwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgQ0dWLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZihDR1YuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkaXZXUEJ0bnMuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmKGFibzkuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QnRuUGF5bWVudChcImJ0bjlcIik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoYWJvMTguY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93QnRuUGF5bWVudChcImJ0bjE4XCIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGFibzM2LmNoZWNrZWQ9PT10cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0J0blBheW1lbnQoXCJidG4zNlwiKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihhYm81NC5jaGVja2VkPT09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCdG5QYXltZW50KFwiYnRuNTRcIik7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGl2V1BCdG5zLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBDR1YuY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGRpdldQQnRucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIExpc3RlIGRlcyBmaWxsZXVscywgc2kgaWwgeSBlbiBhXG4gICAgICAgICAgICBjb25zdCB4aHJHZXRHb2RjaGlsZHMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhockdldEdvZGNoaWxkcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLmdldEdvZENoaWxkcyk7XG4gICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KSwgdHh0R29kY2hpbGRzPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYkdvZGNoaWxkcz1yZXNwb25zZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihuYkdvZGNoaWxkcz09PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0R29kY2hpbGRzPWluZm9zVXNlck5vR29kY2hpbGRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dEdvZGNoaWxkcz1pbmZvc1VzZXJOYkdvZENoaWxkcy5yZXBsYWNlKFwiI05CXCIsIG5iR29kY2hpbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dEdvZGNoaWxkcys9cmVzcG9uc2VbaV0ubmFtZStcIiAoXCIrcmVzcG9uc2VbaV0uZW1haWwrXCIpIFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2R29kY2hpbGRzLCBcInBcIiwgdHh0R29kY2hpbGRzLCBcIlwiLCBbXCJpbmZvXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7IFxuICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLnNlbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZDcmFzaCwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgPSAoaW5wdXRzQ29uZiwgbXlGb3JtKSA9Plxue1xuICAgIGZvcihsZXQgaSBpbiBteUZvcm0uZWxlbWVudHMpXG4gICAge1xuICAgICAgICBpZighaXNFbXB0eShteUZvcm0uZWxlbWVudHNbaV0uaWQpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgaWRJbnB1dD1teUZvcm0uZWxlbWVudHNbaV0uaWQ7XG4gICAgICAgICAgICBpZihpbnB1dHNDb25mW2lkSW5wdXRdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dEhUTUw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRJbnB1dCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIGluIGlucHV0c0NvbmZbaWRJbnB1dF0pXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SFRNTC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbnB1dHNDb25mW2lkSW5wdXRdW2F0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBSw6ljdXDDqHJlIHRvdXRlcyBsZXMgdmFsZXVycyBkZSBjaGFtcHMgZW4gb21ldHRhbnQgbGVzIGNoZWNrYm94IG5vbiBjb2Now6llcywgZXRjLlxuZXhwb3J0IGNvbnN0IGdldERhdGFzRnJvbUlucHV0cyA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZGF0YXM9e307XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAgICAgZGF0YXNbZW50cmllWzBdXT1lbnRyaWVbMV07XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBWaWRlIHRvdXMgbGVzIGNoYW1wcyBkJ3VuIGZvcm11bGFpcmUsIHkgY29tcHJpcyBoaWRkZW4sIGNoZWNrYm94LCBldGMuXG4vLyBSZXZvaXIgcG91ciBsZXMgc2VsZWN0XG5leHBvcnQgY29uc3QgZW1weUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgIHtcbiAgICAgICAgaWYobXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJjaGVja2JveFwiIHx8IG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwicmFkaW9cIilcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLmNoZWNrZWQ9ZmFsc2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnZhbHVlPVwiXCI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8gVmlkZSBldCBjYWNoZSBsZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgZW1weUFuZEhpZGVGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBlbXB5Rm9ybShteUZvcm0pO1xuICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSIsImNvbnN0IGNoZWNrQm94ZXM9XG57XG4gICAgXCJDR1ZcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiQ0dWT2tcIiksXG4gICAgXCJhYm8xXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzFcIiksXG4gICAgXCJhYm8yXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzJcIiksXG4gICAgXCJhYm8zXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzNcIiksXG4gICAgXCJhYm80XCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzRcIilcbn1cbmNvbnN0IGRpdldQQnRucz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuc1wiKTtcblxuLy8gTG9yc3F1ZSBsJ29uIHPDqWxlY3Rpb25uZSB1biBtb250YW50LCBsZXMgYXV0cmVzIG9wdGlvbnMgKyBsZXMgQ0dWIHNvbnQgZMOpc8OpbGVjdGlvbm7DqXNcbmV4cG9ydCBjb25zdCB1bkNoZWNrQWxsT3RoZXJzID0gKGNob2ljZSkgPT5cbntcbiAgICBmb3IgKGxldCBpZCBpbiBjaGVja0JveGVzKVxuICAgIHtcbiAgICAgICAgaWYoaWQhPT1jaG9pY2UpXG4gICAgICAgICAgICBjaGVja0JveGVzW2lkXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBkaXZXUEJ0bnMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICB9XG59XG5cblxuY29uc3QgYnRucz1cbntcbiAgICBcImJ0bjFcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG4xXCIpLFxuICAgIFwiYnRuMlwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bjJcIiksXG4gICAgXCJidG4zXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuM1wiKSxcbiAgICBcImJ0bjRcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG40XCIpXG59XG5cbi8vIEFmZmljaGUgbGUgYm9uIGJvdXRvbiBkZSBwYWllbWVudCBldCBjYWNoZSBsZXMgYXV0cmVzXG5leHBvcnQgY29uc3Qgc2hvd0J0blBheW1lbnQgPSAoY2hvaWNlKSA9Plxue1xuICAgIGZvciAobGV0IGlkIGluIGJ0bnMpXG4gICAge1xuICAgICAgICBpZihpZCE9PWNob2ljZSlcbiAgICAgICAgICAgIGJ0bnNbaWRdLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGJ0bnNbaWRdLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgIH1cbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/front/public/JS/connection.app.js b/front/public/JS/connection.app.js index 11e74ca..e720260 100644 --- a/front/public/JS/connection.app.js +++ b/front/public/JS/connection.app.js @@ -978,20 +978,16 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/matomo.js */ "./src/tools/matomo.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DU FORMULAIRE PERMETTANT DE SE CONNECTER /// L'utilisateur peut avoir répondu à un quiz avant d'arriver sur la page de connexion. /// Dans ce cas il faut enregistrer son résultat en même temps, une fois la connexion validée. /// Le connexion peut se faire directement ici via la saisie d'un mot de passe ou via l'envoi d'un token par e-mail. // Fichier de configuration tirés du backend : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Importation des fonctions utiles au script : +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Importation des fonctions utiles au script : @@ -1002,73 +998,48 @@ var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require.serverError; +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - alreadyConnected = _require2.alreadyConnected, - needChooseLoginWay = _require2.needChooseLoginWay; // Principaux éléments du DOM manipulés : +const { + alreadyConnected, + needChooseLoginWay +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); // Principaux éléments du DOM manipulés : -var myForm = document.getElementById("connection"); -var divMessage = document.getElementById("message"); -var divResponse = document.getElementById("response"); +const myForm = document.getElementById("connection"); +const divMessage = document.getElementById("message"); +const divResponse = document.getElementById("response"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_4__["helloDev"])(); // Test de connexion de l'utilisateur + affichage formulaire d'inscription. -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, homePage; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_8__["checkSession"])(); +const initialise = async () => { + try { + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_8__["checkSession"])(); - case 3: - isConnected = _context.sent; + if (isConnected) { + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", { + message: alreadyConnected, + color: "info" + }); // pour l'afficher sur la page suivante - if (isConnected) { - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", { - message: alreadyConnected, - color: "info" - }); // pour l'afficher sur la page suivante + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user", true); + const homePage = user.status + "HomePage"; + window.location.assign("/" + configTemplate[homePage]); + } else { + Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_7__["loadMatomo"])(); + myForm.style.display = "block"; - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user", true); - homePage = user.status + "HomePage"; - window.location.assign("/" + configTemplate[homePage]); - } else { - Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_7__["loadMatomo"])(); - myForm.style.display = "block"; - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("message"))) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("message", true).color]); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("message"); - } - } - - _context.next = 11; - break; - - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", serverError, "", ["error"]); - console.error(_context.t0); - - case 11: - case "end": - return _context.stop(); - } + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("message"))) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("message", true).color]); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("message"); } - }, _callee, null, [[0, 7]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", serverError, "", ["error"]); + console.error(e); + } +}; initialise(); // Traitement de l'envoi des données de connexion : @@ -1077,14 +1048,14 @@ myForm.addEventListener("submit", function (e) { e.preventDefault(); divResponse.innerHTML = ""; // efface d'éventuels messages déjà affichés - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_5__["getDatasFromInputs"])(myForm); + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_5__["getDatasFromInputs"])(myForm); if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(datas.password) && Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(datas.getLoginLink)) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "div", needChooseLoginWay, "", ["error"]);else { - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(datas.getLoginLink)) xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["getLoginLinkRoute"]);else xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["connectionRoute"]); xhr.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 200) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(response.message)) { @@ -1093,7 +1064,7 @@ myForm.addEventListener("submit", function (e) { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", response.message, "", ["success"]); } else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(response.userId) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(response.connexionTime) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(response.token)) { // cas d'une connexion via mot de passe avec succès : on crée une session de connexion et redirige l'utilisateur. - var connexionMaxTime = Date.now(); + let connexionMaxTime = Date.now(); if (response.connexionTime.endsWith("days")) // l'utilisateur a demandé à rester connecté sur la durée. connexionMaxTime += parseInt(response.connexionTime, 10) * 24 * 3600 * 1000;else connexionMaxTime += parseInt(response.connexionTime, 10) * 3600 * 1000; Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_8__["setSession"])(response.userId, response.token, connexionMaxTime); @@ -1101,7 +1072,7 @@ myForm.addEventListener("submit", function (e) { myForm.style.display = "none"; // l'utilisateur peut avoir tenté d'accéder à une autre page que sa page d'accueil : - var url = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("url", true); + let url = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("url", true); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(url) && url.href.indexOf(_config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"]) !== -1) { url = url.href; @@ -1148,14 +1119,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1173,32 +1143,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
"); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1222,13 +1181,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1249,25 +1208,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1275,49 +1226,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1338,7 +1267,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__); // Fonction chargeant le code matomo -var loadMatomo = function loadMatomo() { +const loadMatomo = () => { // chargement de matomo var _paq = window._paq = window._paq || []; //ajout cnil : @@ -1404,27 +1333,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1433,11 +1358,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1451,96 +1376,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1549,4 +1446,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9tYXRvbW8uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiZGVmYXVsdFJlY2VpcHREYXlzIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsImZpZWxkTmV3UXVlc3Rpb25uYWlyZXMiLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbiIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4IiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmVzIiwiZGlyV2ViUXVlc3Rpb25uYWlyZXMiLCJtYXRvbW8iLCJ1cmwiLCJzaXRlSWQiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInJlZ2VuZXJhdGVIVE1MIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdyb3VwUm91dGVzIiwiZ2V0R3JvdXBSb3V0ZSIsInByZXZpZXdHcm91cFJvdXRlcyIsInNlYXJjaEdyb3Vwc1JvdXRlIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRBZG1pblN0YXRzIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiYWRkQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJiYWRVcmwiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuU2hvd09uV2ViU2l0ZSIsImRlbGV0ZUJ0blR4dCIsImRlbGV0ZUZhaWxNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aENyb24iLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aFRva2VuIiwibmVlZGVkUGFyYW1zIiwibmV4dFBhZ2UiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJub3RWYWxpZEZvcm1hdCIsInByZXZpb3VzUGFnZSIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzY3JpcHRUaW1pbmdJbmZvIiwic3RhdHNBZG1pbiIsInN1YnNjcmlwdGlvbkNhbGwiLCJ1cGRhdGVCdG5UeHQiLCJ1cGRhdGVPa01lc3NhZ2UiLCJhbHJlYWR5Q29ubmVjdGVkIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiYmFkUGFzc3dvcmQiLCJieWVieWVNZXNzYWdlIiwiY29ubmVjdGlvbk9rIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiZmFpbEJvdFRlc3QiLCJmYWlsQm90VGVzdExvZyIsImZvcm1zRW1haWxMYWJlbCIsImZvcm1zRW1haWxQbGFjZWhvbGRlciIsImZvcm1zRW1haWwyUGxhY2Vob2xkZXIiLCJmb3Jtc0NHVU9rTGFiZWwiLCJmb3Jtc1N1Ym1pdFR4dCIsImdvZGZhdGhlckZvdW5kIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc1VzZXJOYkdvZENoaWxkcyIsImluZm9zVXNlck5vR29kY2hpbGRzIiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luTGlua1R4dCIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtUeHQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVMaW5rVHh0IiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibmVlZEJlQ29ubmVjdGVkIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZEVtYWlsIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZFN0YXR1cyIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsInBhc3N3b3JkQ29waWVkIiwic2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0IiwidG9vTWFueUxvZ2luRmFpbHMiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ3ZWxjb21lTWVzc2FnZSIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsImkiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJ0YWdzTGlzdFR4dCIsImFib3V0UGFnZSIsImNndVBhZ2UiLCJkZWxldGVMaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJ1c2VySG9tZVBhZ2VUeHQiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJtYWlsUmVjaXBpZW50VHh0IiwibGljZW5jZVR4dCIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsImhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZSIsIm5ld3NMaXN0VGl0bGUiLCJ0YWdMaXN0VGl0bGUiLCJ0YWdMaXN0TWV0YURlc2MiLCJ0YWdMaXN0SW50cm8iLCJhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQiLCJxdWl6RWxlbWVudExpbmtzSW50cm8iLCJxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlIiwiZXhwbGFuYXRpb25FbGVtZW50VHh0IiwidHdpdHRlckFjY291bnQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsImNvbmZpZ1RlbXBsYXRlIiwibXlGb3JtIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1lc3NhZ2UiLCJkaXZSZXNwb25zZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImNoZWNrU2Vzc2lvbiIsImlzQ29ubmVjdGVkIiwic2F2ZUxvY2FseSIsIm1lc3NhZ2UiLCJjb2xvciIsInVzZXIiLCJnZXRMb2NhbHkiLCJob21lUGFnZSIsInN0YXR1cyIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwibG9hZE1hdG9tbyIsInN0eWxlIiwiZGlzcGxheSIsImFkZEVsZW1lbnQiLCJyZW1vdmVMb2NhbHkiLCJjb25zb2xlIiwiZXJyb3IiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwiaW5uZXJIVE1MIiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJnZXRMb2dpbkxpbmsiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwidXNlcklkIiwiY29ubmV4aW9uVGltZSIsInRva2VuIiwiY29ubmV4aW9uTWF4VGltZSIsIm5vdyIsImVuZHNXaXRoIiwicGFyc2VJbnQiLCJzZXRTZXNzaW9uIiwiaW5kZXhPZiIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0aW1lRGlmZmVyZW5jZSIsImdldFRpbWVEaWZmZXJlbmNlIiwiY2hlY2tBbnN3ZXJEYXRhcyIsInNlbmQiLCJzdHJpbmdpZnkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJsaW5rIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiaW5wdXRzQ29uZiIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWVzIiwiZW50cmllIiwiZW1weUZvcm0iLCJ0eXBlIiwiY2hlY2tlZCIsImVtcHlBbmRIaWRlRm9ybSIsIl9wYXEiLCJwdXNoIiwic2VsZiIsImdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQiLCJub3dUcyIsInJvdW5kIiwiZ2V0VGltZSIsInZpc2l0b3JJbmZvIiwiZ2V0VmlzaXRvckluZm8iLCJjcmVhdGVUcyIsImNvb2tpZVRpbWVvdXQiLCJvcmlnaW5hbFRpbWVvdXQiLCJzZXRWaXNpdG9yQ29va2llVGltZW91dCIsInUiLCJkIiwiZyIsInMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJvbmVycm9yIiwi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O0FBQ0FpSCxrQ0FBWSxDQUFDTixjQUFELEVBQWlCeEgsT0FBakIsRUFBMEJ5SCxTQUExQixDQUFaO0FBQ0FFLDZCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBcEcscUJBQUcsQ0FBQzZHLE9BQUosR0FBYztBQUFBLDJCQUFNUixNQUFNLENBQUNyRyxHQUFHLENBQUM4RyxVQUFMLENBQVo7QUFBQSxtQkFBZDs7QUFDQTlHLHFCQUFHLENBQUMwQixJQUFKO0FBQ0g7QUFDSjtBQUNKLGFBdEVNLENBRmlCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVpwRCxZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTWlJLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNOLGNBQUQsRUFBaUJ4SCxPQUFqQixFQUEwQnlILFNBQTFCLEVBQ3JCO0FBQ0ksTUFBRyxDQUFDMU4sMkRBQU8sQ0FBQ2lHLE9BQUQsQ0FBWCxFQUNJRCxvRUFBVSxDQUFDLFNBQUQsRUFBWUMsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDakcsMkRBQU8sQ0FBQzBOLFNBQUQsQ0FBWCxFQUNJMUgsb0VBQVUsQ0FBQyxLQUFELEVBQVEwSCxTQUFSLENBQVY7QUFDSixNQUFHLENBQUMxTiwyREFBTyxDQUFDeU4sY0FBRCxDQUFYLEVBQ0lsSCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCZ0gsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9jb25uZWN0aW9uLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2Nvbm5lY3Rpb24uanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwiLy8gU2kgbm9uIHV0aWxpc8OpLCBzdXBwcmltZXIgbCdhcHBlbCBkZXMgSlMgZnJvbnQtZW5kIHB1aXMgcmVjb21waWxlci5cbi8vIFJldm9pciBjb21tZW50IHLDqW9yZ2FuaXNlciBjZWxhIHNvdXMtZm9ybWUgZGUgbW9kdWxlIGluZMOpcGVuZGFudC5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBTdGF0cyBNYXRvbW8gOlxuICAgIG1hdG9tbzogeyB1cmw6IFwiaHR0cHM6Ly9zdGF0cy5sZS1mYWItbGFiLmNvbS9cIiwgc2l0ZUlkOiBcIjVcIiB9LFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgU0UgQ09OTkVDVEVSXG5cbi8vLyBMJ3V0aWxpc2F0ZXVyIHBldXQgYXZvaXIgcsOpcG9uZHUgw6AgdW4gcXVpeiBhdmFudCBkJ2Fycml2ZXIgc3VyIGxhIHBhZ2UgZGUgY29ubmV4aW9uLlxuLy8vIERhbnMgY2UgY2FzIGlsIGZhdXQgZW5yZWdpc3RyZXIgc29uIHLDqXN1bHRhdCBlbiBtw6ptZSB0ZW1wcywgdW5lIGZvaXMgbGEgY29ubmV4aW9uIHZhbGlkw6llLlxuXG4vLy8gTGUgY29ubmV4aW9uIHBldXQgc2UgZmFpcmUgZGlyZWN0ZW1lbnQgaWNpIHZpYSBsYSBzYWlzaWUgZCd1biBtb3QgZGUgcGFzc2Ugb3UgdmlhIGwnZW52b2kgZCd1biB0b2tlbiBwYXIgZS1tYWlsLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5pbXBvcnQgeyBjb25uZWN0aW9uUm91dGUsIGdldExvZ2luTGlua1JvdXRlLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgbG9hZE1hdG9tbyB9IGZyb20gXCIuL3Rvb2xzL21hdG9tby5qc1wiO1xuaW1wb3J0IHsgY2hlY2tBbnN3ZXJEYXRhcywgY2hlY2tTZXNzaW9uLCBnZXRUaW1lRGlmZmVyZW5jZSwgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBhbHJlYWR5Q29ubmVjdGVkLCBuZWVkQ2hvb3NlTG9naW5XYXkgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IG15Rm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29ubmVjdGlvblwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbi8vIFRlc3QgZGUgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgKyBhZmZpY2hhZ2UgZm9ybXVsYWlyZSBkJ2luc2NyaXB0aW9uLlxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogYWxyZWFkeUNvbm5lY3RlZCwgY29sb3I6XCJpbmZvXCIgfSk7Ly8gcG91ciBsJ2FmZmljaGVyIHN1ciBsYSBwYWdlIHN1aXZhbnRlXG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBob21lUGFnZT11c2VyLnN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBsb2FkTWF0b21vKCk7XG4gICAgICAgICAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgXG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7XG5cbi8vIFRyYWl0ZW1lbnQgZGUgbCdlbnZvaSBkZXMgZG9ubsOpZXMgZGUgY29ubmV4aW9uIDpcbm15Rm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiOy8vIGVmZmFjZSBkJ8OpdmVudHVlbHMgbWVzc2FnZXMgZMOpasOgIGFmZmljaMOpc1xuICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKG15Rm9ybSk7XG4gICAgICAgIGlmKGlzRW1wdHkoZGF0YXMucGFzc3dvcmQpICYmIGlzRW1wdHkoZGF0YXMuZ2V0TG9naW5MaW5rKSlcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwiZGl2XCIsIG5lZWRDaG9vc2VMb2dpbldheSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoZGF0YXMuZ2V0TG9naW5MaW5rKSlcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrZ2V0TG9naW5MaW5rUm91dGUpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjb25uZWN0aW9uUm91dGUpO1xuICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXNwb25zZS5tZXNzYWdlKSkgXG4gICAgICAgICAgICAgICAgICAgICAgICB7ICAgLy8gY2FzIGQndW5lIGRlbWFuZGUgZGUgbGllbiBkZSBjb25uZXhpb24gYXZlYyBzdWNjw6hzLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzRW1wdHkocmVzcG9uc2UudXNlcklkKSAmJiAhaXNFbXB0eShyZXNwb25zZS5jb25uZXhpb25UaW1lKSAmJiAhaXNFbXB0eShyZXNwb25zZS50b2tlbikpXG4gICAgICAgICAgICAgICAgICAgICAgICB7ICAgLy8gY2FzIGQndW5lIGNvbm5leGlvbiB2aWEgbW90IGRlIHBhc3NlIGF2ZWMgc3VjY8OocyA6IG9uIGNyw6llIHVuZSBzZXNzaW9uIGRlIGNvbm5leGlvbiBldCByZWRpcmlnZSBsJ3V0aWxpc2F0ZXVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25uZXhpb25NYXhUaW1lPURhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuY29ubmV4aW9uVGltZS5lbmRzV2l0aChcImRheXNcIikpLy8gbCd1dGlsaXNhdGV1ciBhIGRlbWFuZMOpIMOgIHJlc3RlciBjb25uZWN0w6kgc3VyIGxhIGR1csOpZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uTWF4VGltZSs9cGFyc2VJbnQocmVzcG9uc2UuY29ubmV4aW9uVGltZSwxMCkqMjQqMzYwMCoxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uTWF4VGltZSs9cGFyc2VJbnQocmVzcG9uc2UuY29ubmV4aW9uVGltZSwxMCkqMzYwMCoxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlc3Npb24ocmVzcG9uc2UudXNlcklkLCByZXNwb25zZS50b2tlbiwgY29ubmV4aW9uTWF4VGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibGFzdEFuc3dlclwiKTsvLyAhIGltcG9ydGFudCBwb3VyIG5lIHBhcyBlbnJlZ2lzdGVyIHBsdXNpZXVycyBmb2lzIHNvbiDDqXZlbnR1ZWwgcsOpc3VsdGF0IGF1IHF1aXouICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbCd1dGlsaXNhdGV1ciBwZXV0IGF2b2lyIHRlbnTDqSBkJ2FjY8OpZGVyIMOgIHVuZSBhdXRyZSBwYWdlIHF1ZSBzYSBwYWdlIGQnYWNjdWVpbCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybD1nZXRMb2NhbHkoXCJ1cmxcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkodXJsKSAmJiB1cmwuaHJlZi5pbmRleE9mKHNpdGVVcmwpIT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9dXJsLmhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVybFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw9Y29uZmlnVGVtcGxhdGVbcmVzcG9uc2Uuc3RhdHVzK1wiSG9tZVBhZ2VcIl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSBzZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkYXRhcy50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZSgpO1xuICAgICAgICAgICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSDDoCB1biBxdWl6LCBqJ2Fqb3V0ZSBsZXMgaW5mb3MgZGUgc29uIHLDqXN1bHRhdCBhdXggZG9ubsOpZXMgZW52b3nDqWVzIDpcbiAgICAgICAgICAgICAgICBkYXRhcz1jaGVja0Fuc3dlckRhdGFzKGRhdGFzKTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59KTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBtYXRvbW8gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL21hdG9tby5qc1wiO1xuXG4vLyBGb25jdGlvbiBjaGFyZ2VhbnQgbGUgY29kZSBtYXRvbW9cbmV4cG9ydCBjb25zdCBsb2FkTWF0b21vID0gKCkgPT5cbntcbiAgICAvLyBjaGFyZ2VtZW50IGRlIG1hdG9tb1xuICAgIHZhciBfcGFxID0gd2luZG93Ll9wYXEgPSB3aW5kb3cuX3BhcSB8fCBbXTtcbiAgICAvL2Fqb3V0IGNuaWwgIDpcbiAgICBfcGFxLnB1c2goW2Z1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgZnVuY3Rpb24gZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgbm93VHMgPSBNYXRoLnJvdW5kKG5vdy5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICAgICAgICAgIHZpc2l0b3JJbmZvID0gc2VsZi5nZXRWaXNpdG9ySW5mbygpO1xuICAgICAgICAgICAgdmFyIGNyZWF0ZVRzID0gcGFyc2VJbnQodmlzaXRvckluZm9bMl0pO1xuICAgICAgICAgICAgdmFyIGNvb2tpZVRpbWVvdXQgPSAzMzY5NjAwMDsgLy8gMTMgbW9pcyBlbiBzZWNvbmRlc1xuICAgICAgICAgICAgdmFyIG9yaWdpbmFsVGltZW91dCA9IGNyZWF0ZVRzICsgY29va2llVGltZW91dCAtIG5vd1RzO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZpc2l0b3JDb29raWVUaW1lb3V0KCBnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0KCkgKTtcbiAgICB9XSk7XG4gICAgLy8tLWZpbiBham91dCBjbmlsXG4gICAgX3BhcS5wdXNoKFsndHJhY2tQYWdlVmlldyddKTtcbiAgICBfcGFxLnB1c2goWydlbmFibGVMaW5rVHJhY2tpbmcnXSk7XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdT1tYXRvbW8udXJsO1xuICAgICAgICBfcGFxLnB1c2goWydzZXRUcmFja2VyVXJsJywgdSsnbWF0b21vLnBocCddKTtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0U2l0ZUlkJywgbWF0b21vLnNpdGVJZF0pO1xuICAgICAgICB2YXIgZD1kb2N1bWVudCwgZz1kLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLCBzPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdO1xuICAgICAgICBnLnR5cGU9J3RleHQvamF2YXNjcmlwdCc7IGcuYXN5bmM9dHJ1ZTsgZy5zcmM9dSsnbWF0b21vLmpzJzsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpO1xuICAgIH0pKCk7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6IG91IGQndW4gZ3JvdXBlIGRlIHF1aXpzXG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICghaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSB8fCAhaXNFbXB0eShhbnN3ZXIuR3JvdXBJZCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkpXG4gICAgICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGF0YXMuR3JvdXBJZD1hbnN3ZXIuR3JvdXBJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9tYXRvbW8uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiZGVmYXVsdFJlY2VpcHREYXlzIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsImZpZWxkTmV3UXVlc3Rpb25uYWlyZXMiLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbiIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4IiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmVzIiwiZGlyV2ViUXVlc3Rpb25uYWlyZXMiLCJtYXRvbW8iLCJ1cmwiLCJzaXRlSWQiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInJlZ2VuZXJhdGVIVE1MIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdyb3VwUm91dGVzIiwiZ2V0R3JvdXBSb3V0ZSIsInByZXZpZXdHcm91cFJvdXRlcyIsInNlYXJjaEdyb3Vwc1JvdXRlIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRBZG1pblN0YXRzIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiYWRkQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJiYWRVcmwiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuU2hvd09uV2ViU2l0ZSIsImRlbGV0ZUJ0blR4dCIsImRlbGV0ZUZhaWxNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aENyb24iLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aFRva2VuIiwibmVlZGVkUGFyYW1zIiwibmV4dFBhZ2UiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJub3RWYWxpZEZvcm1hdCIsInByZXZpb3VzUGFnZSIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzY3JpcHRUaW1pbmdJbmZvIiwic3RhdHNBZG1pbiIsInN1YnNjcmlwdGlvbkNhbGwiLCJ1cGRhdGVCdG5UeHQiLCJ1cGRhdGVPa01lc3NhZ2UiLCJhbHJlYWR5Q29ubmVjdGVkIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiYmFkUGFzc3dvcmQiLCJieWVieWVNZXNzYWdlIiwiY29ubmVjdGlvbk9rIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiZmFpbEJvdFRlc3QiLCJmYWlsQm90VGVzdExvZyIsImZvcm1zRW1haWxMYWJlbCIsImZvcm1zRW1haWxQbGFjZWhvbGRlciIsImZvcm1zRW1haWwyUGxhY2Vob2xkZXIiLCJmb3Jtc0NHVU9rTGFiZWwiLCJmb3Jtc1N1Ym1pdFR4dCIsImdvZGZhdGhlckZvdW5kIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc1VzZXJOYkdvZENoaWxkcyIsImluZm9zVXNlck5vR29kY2hpbGRzIiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luTGlua1R4dCIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtUeHQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVMaW5rVHh0IiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibmVlZEJlQ29ubmVjdGVkIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZEVtYWlsIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZFN0YXR1cyIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsInBhc3N3b3JkQ29waWVkIiwic2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0IiwidG9vTWFueUxvZ2luRmFpbHMiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ3ZWxjb21lTWVzc2FnZSIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsImkiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJ0YWdzTGlzdFR4dCIsImFib3V0UGFnZSIsImNndVBhZ2UiLCJkZWxldGVMaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJ1c2VySG9tZVBhZ2VUeHQiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJtYWlsUmVjaXBpZW50VHh0IiwibGljZW5jZVR4dCIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsImhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZSIsIm5ld3NMaXN0VGl0bGUiLCJ0YWdMaXN0VGl0bGUiLCJ0YWdMaXN0TWV0YURlc2MiLCJ0YWdMaXN0SW50cm8iLCJhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQiLCJxdWl6RWxlbWVudExpbmtzSW50cm8iLCJxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlIiwiZXhwbGFuYXRpb25FbGVtZW50VHh0IiwidHdpdHRlckFjY291bnQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsImNvbmZpZ1RlbXBsYXRlIiwibXlGb3JtIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1lc3NhZ2UiLCJkaXZSZXNwb25zZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImlzQ29ubmVjdGVkIiwiY2hlY2tTZXNzaW9uIiwic2F2ZUxvY2FseSIsIm1lc3NhZ2UiLCJjb2xvciIsInVzZXIiLCJnZXRMb2NhbHkiLCJob21lUGFnZSIsInN0YXR1cyIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwibG9hZE1hdG9tbyIsInN0eWxlIiwiZGlzcGxheSIsImFkZEVsZW1lbnQiLCJyZW1vdmVMb2NhbHkiLCJlIiwiY29uc29sZSIsImVycm9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsInByZXZlbnREZWZhdWx0IiwiaW5uZXJIVE1MIiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJnZXRMb2dpbkxpbmsiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwidXNlcklkIiwiY29ubmV4aW9uVGltZSIsInRva2VuIiwiY29ubmV4aW9uTWF4VGltZSIsIm5vdyIsImVuZHNXaXRoIiwicGFyc2VJbnQiLCJzZXRTZXNzaW9uIiwiaW5kZXhPZiIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0aW1lRGlmZmVyZW5jZSIsImdldFRpbWVEaWZmZXJlbmNlIiwiY2hlY2tBbnN3ZXJEYXRhcyIsInNlbmQiLCJzdHJpbmdpZnkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJsaW5rIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiaW5wdXRzQ29uZiIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWUiLCJlbnRyaWVzIiwiZW1weUZvcm0iLCJ0eXBlIiwiY2hlY2tlZCIsImVtcHlBbmRIaWRlRm9ybSIsIl9wYXEiLCJwdXNoIiwic2VsZiIsImdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQiLCJub3dUcyIsInJvdW5kIiwiZ2V0VGltZSIsInZpc2l0b3JJbmZvIiwiZ2V0VmlzaXRvckluZm8iLCJjcmVhdGVUcyIsImNvb2tpZVRpbWVvdXQiLCJvcmlnaW5hbFRpbWVvdXQiLCJzZXRWaXNpdG9yQ29va2llVGltZW91dCIsInUiLCJkIiwiZyIsInMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJvbmVycm9yIiwi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T0FBakIsRUFBMEJ5SCxTQUExQixLQUNyQjtBQUNJLE1BQUcsQ0FBQzFOLDJEQUFPLENBQUNpRyxPQUFELENBQVgsRUFDSUQsb0VBQVUsQ0FBQyxTQUFELEVBQVlDLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ2pHLDJEQUFPLENBQUMwTixTQUFELENBQVgsRUFDSTFILG9FQUFVLENBQUMsS0FBRCxFQUFRMEgsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDMU4sMkRBQU8sQ0FBQ3lOLGNBQUQsQ0FBWCxFQUNJbEgsTUFBTSxDQUFDQyxRQUFQLENBQWdCQyxNQUFoQixDQUF1QmdILGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvY29ubmVjdGlvbi5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9jb25uZWN0aW9uLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIi8vIFNpIG5vbiB1dGlsaXPDqSwgc3VwcHJpbWVyIGwnYXBwZWwgZGVzIEpTIGZyb250LWVuZCBwdWlzIHJlY29tcGlsZXIuXG4vLyBSZXZvaXIgY29tbWVudCByw6lvcmdhbmlzZXIgY2VsYSBzb3VzLWZvcm1lIGRlIG1vZHVsZSBpbmTDqXBlbmRhbnQuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gU3RhdHMgTWF0b21vIDpcbiAgICBtYXRvbW86IHsgdXJsOiBcImh0dHBzOi8vc3RhdHMubGUtZmFiLWxhYi5jb20vXCIsIHNpdGVJZDogXCI1XCIgfSxcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqSBhdSBzaXRlICFcIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBiYWRQYXNzd29yZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbmUgY29ycmVzcG9uZCBhdXggaW5mb3JtYXRpb25zIHNhaXNpZXMuXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsIFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgZmFpbEJvdFRlc3Q6IFwiVW4gcHJvYmzDqG1lIGEgw6l0w6kgcmVuY29udHLDqSBkdXJhbnQgdm90cmUgaW5zY3JpcHRpb24uIEVuIGNhcyBkZSBkaWZmaWN1bHTDqSwgbidow6lzaXRleiBwYXMgY29udGFjdGVyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBmYWlsQm90VGVzdExvZzogXCJVbmUgaW5zY3JpcHRpb24gYSDDqXTDqSBibG9xdcOpZSwgcGFyY2UgcXVlIGxlIGNoYW1wIGVtYWlsMiDDqXRhaXQgcmVuc2VpZ27DqSBhdmVjIDogXCIsXG4gICAgZm9ybXNFbWFpbExhYmVsOiBcIkUtbWFpbCA6XCIsXG4gICAgZm9ybXNFbWFpbFBsYWNlaG9sZGVyOiBcIlZvdHJlIGFkcmVzc2UgZS1tYWlsXCIsXG4gICAgZm9ybXNFbWFpbDJQbGFjZWhvbGRlcjogXCJTaSB2b3VzIHZveWV6IGNlIGNoYW1wLCBsYWlzc2V6LWxlIHZpZGVcIiwvL2NoYW1wIHF1aSBuZSBkZXZyYWl0IHBhcyDDqnRyZSB2aXNpYmxlIHBhciBkZXMgaHVtYWluc1xuICAgIGZvcm1zQ0dVT2tMYWJlbDogXCJKJ2FjY2VwdGUgPGEgaHJlZj0jbGluayB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgcmVsPVxcXCJub29wZW5lclxcXCIgdGl0bGU9XFxcIsOAIGxpcmUgOilcXFwiPmxlcyBDb25kaXRpb25zIEfDqW7DqXJhbGUgZCdVdGlsaXNhdGlvbjwvYT4gZHUgc2l0ZSAocmVxdWlzKS5cIixcbiAgICBmb3Jtc1N1Ym1pdFR4dDogXCJKZSBtJ2Fib25uZSAhXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgXFxcInBhcnJhaW5cXFwiIGEgYmllbiDDqXTDqSB0cm91dsOpLiBDZXR0ZSBwZXJzb25uZSBzZXJhIGF2ZXJ0aWUgcXVlIHZvdXMgbCdhdmV6IGTDqXNpZ27DqWUuXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiRMOpc29sw6kgbWFpcyBhdWN1biB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNlIGNvZGUgLyBlLW1haWwgZGUgcGFycmFpbmFnZSA6KFwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVscyA6IFwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NVc2VyTmJHb2RDaGlsZHM6IFwiVm9pY2kgbGVzICNOQiB1dGlsaXNhdGV1cihzKSBpbnNjcml0KHMpIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIgOiBcIixcbiAgICBpbmZvc1VzZXJOb0dvZGNoaWxkczogXCJQb3VyIGwnaW5zdGFudCwgYXVjdW5lIHBlcnNvbm5lIG5lIHMnZXN0IGluc2NyaXRlLCBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiLlwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBhIGV4cGlyw6kuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCAqVElNSU5HKiAhXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjxicj5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLjwvcD48cD5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuU2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy5cXG5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlLW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+Ljxicj5FbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb25cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtUeHQgOiBcIlZhbGlkZXIgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0IEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkJ8OqdHJlIGVudm95w6kgw6Agdm90cmUgYWRyZXNzZSBlLW1haWwgKCNFTUFJTCkuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgITxicj48YnI+U2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIDxiPkVNQUlMPC9iPi48YnI+PGJyPkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIDxiPkVNQUlMPC9iPiDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyA8Yj5wb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT48L2I+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuPGJyPjxicj5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIGNpLWRlc3NvdXMuPGJyPjxicj7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuXFxuXFxuUG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBzdWl2YW50IDogTElOS19VUkxcXG5cXG7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgdW4gc2VydmV1ciBTTVRQIHZhbGlkZS5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiTWVyY2kgZCdhY2NlcHRlciBsZXMgQ0dVIHBvdXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGNvbXB0ZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSBwb3V2b2lyIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBub3V2ZWF1IGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgbGUgcHJlc3NlLXBhcGllciBkZSB2b3RyZSBvcmRpbmF0ZXVyIChvdSBtb2JpbGUpLiBWb3VzIHBvdXZleiBsZSBcXFwiY29sbGVyXFxcIiBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgc2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0OiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJEw6lzb2zDqSBtYWlzIGlsIHkgYSBldSB0cm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdGV6IG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLiBWb3VzIHBvdXZleiB2b3VzIHkgY29ubmVjdGVyIDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBjb21wbMOpdGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgdm90cmUgYWJvbm5lbWVudCBjaS1kZXNzb3VzLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIuKAplwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxuXG4gICAgLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4gICAgLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG4gICAgc3RhdGljIGdldFBhc3N3b3JkIChuYkNhck1pbiwgbmJDYXJNYXgpXG4gICAge1xuICAgICAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgICAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgICAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgICAgICB9XG4gICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICByZXR1cm4gcGFzc3dvcmQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBsaWVucyBkZSBsJ2ludGVyZmFjZVxuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9uc1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIsIHRpdGxlOlwiQWNjw6lkZXIgb3UgY3LDqWV6IHZvdHJlIGNvbXB0ZSBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiLCB0aXRsZTpcIkVuIHNhdm9pciArIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiLCB0aXRsZTpcIlBhZ2UgZCdhY2N1ZWlsXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkxlIGJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiwgdGl0bGU6XCJRdWkgYSBjcsOpw6kgV2lraUxlcm5pID8gUXVlbHMgc29udCB2b3MgZHJvaXRzID9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiLCB0aXRsZTpcIlZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZTogXCJhZG1pbi5odG1sXCIsXG4gICAgY2d1UGFnZTogXCJDR1YtQ0dVLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLCAgICBcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2VUeHQgOiBcIk1hIHBhZ2UgZCdhY2N1ZWlsLlwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgLyogVGV4dGVzIChnw6luw6lyYWwpICovXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbiAgICBsaWNlbmNlVHh0OiBcIkBjb3B5bGVmdCBMZSBjb250ZW51IGRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgP1xcXCI+ZXN0IGxpYnJlPC9hPiBldCB2b3VzIGVzdCBvZmZlcnQgc2FucyBwdWJsaWNpdMOpLiBWb3VzIHBvdXZleiA8YSBocmVmPVxcXCIvcGFydGljaXBlci1maW5hbmNlbWVudC5odG1sXFxcIiB0aXRsZT1cXFwiRmluYW5jZW1lbnQgcGFydGljaXBhdGlmIGF2ZWMgY29udHJlLXBhcnRpZXNcXFwiPnBhcnRpY2lwZXIgw6Agc29uIGZpbmFuY2VtZW50IGVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgLyogUGFnZSBkJ2FjY3VlaWwgKi9cbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiPGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+Ljxicj5Wb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzLCBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLjxicj5EZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgPGI+ZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgY3VsdHVyZSBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBqYXJkaW48L2I+LlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIjxiPlBhcyBkZSBmYWl0cyBhbHRlcm5hdGlmczwvYj4sIHRvdXMgbGVzIGNvbnRlbnVzIHNvbnQgPGI+c291cmPDqXMgcGFyIGRlcyBhcnRpY2xlcyBXaWtpcMOpZGlhPC9iPi48YnI+RXQgdG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwdWJsacOpIHN1ciBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzIHN1ciBjZSBzdWpldFxcXCI+c29udCBwYXJ0YWfDqXMgc291cyBsaWNlbmNlcyBsaWJyZXM8L2E+Ljxicj5MZSB0b3V0IHNhbnMgcHVibGljaXTDqSwgbmkgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzLjxicj48Yj5TdXIgV2lraUxlcm5pLCB2b3VzIGN1bHRpdmV6IHZvdHJlIGphcmRpbiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjwvYj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSA/XCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogIFwiVGVzdGV6IFdpa2lMZXJuaVwiLFxuICAgIGhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZTogIFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIC8qIFBhZ2UgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuLi4gKi8gICBcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIldpa2lMZXJuaSA6IHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiPHA+PGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgcXVlbHF1ZSBjaG9zZSBkZSBub3V2ZWF1PC9iPjxicj5TaSBkZXNzb3VzIGxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4gVm91cyBwb3V2ZXogYXVzc2kgPGEgaHJlZj0nL3F1aXpzL3RoZW1lcy5odG1sJz5wYXJjb3VyaXIgbGUgc2l0ZSBwYXIgdGjDqG1lcyBvdSBtb3RzLWNsw6lzPC9hPi48L3A+XCIsXG4gICAgLyogUGxhbiBkdSBzaXRlLCBsaXN0ZSBkZXMgdGFncyAqLyAgIFxuICAgIHRhZ0xpc3RUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBkZXMgYXJ0aWNsZXMgZXQgcXVpenMgc3VyIGRlIG5vbWJyZXV4IHRow6htZXMgIVwiLFxuICAgIHRhZ0xpc3RNZXRhRGVzYzogXCJXaWtpTGVybmkgOiBkw6ljb3V2cmlyIGxlcyBkaWZmw6lyZW50cyB0aMOobWVzIGFib3Jkw6lzIHBhciBXaWtpTGVybmkuIElueGV4IGR1IHNpdGUuXCIsXG4gICAgdGFnTGlzdEludHJvOiBcIjxoMz5BdmVjIFdpa2lMZXJuaSwgZGV2ZW5leiBmb3J0IGVuIHRow6htZXMuLi4gT3VpIG1haXMgcXVlbHMgdGjDqG1lcyA/IDopPC9oMz48YmxvY2txdW90ZT5BcmlzdG90ZeKArzogwqvigK9M4oCZaG9tbWUgYSBuYXR1cmVsbGVtZW50IGxhIHBhc3Npb24gZGUgY29ubmHDrnRyZeKApuKAr8K7PC9ibG9ja3F1b3RlPlwiLFxuICAgIC8qIFBhZ2UgcXVpenMgKi9cbiAgICBhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQ6IFwiUmVsaXJlXCIsXG4gICAgcXVpekVsZW1lbnRMaW5rc0ludHJvOiBcIkVuIHNhdm9pciBwbHVzXCIsXG4gICAgcXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZTogXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5p4oCvP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIjxwPkxlIHByaW5jaXBlIGVzdCBzaW1wbGXigK86IDxiPnZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpPC9iPi4gUHVpcyB2b3VzIDxiPmFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZTwvYj4uIFN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgPGI+dW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXM8L2I+IGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gQ+KAmWVzdCB0b3Vqb3VycyA8Yj5sZSBjb250ZW51IGRlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pPC9iPiBjb25jZXJuYW50IGxlcyDCq+KAr2Jvbm5lc+KAr8K7IHLDqXBvbnNlcy4gQ+KAmWVzdCB1bmUgZmHDp29uIGRlIHRlc3RlciDDoCBsYSBmb2lzIHZvdHJlIGNhcGFjaXTDqSBk4oCZYXR0ZW50aW9uIGV0IHZvdHJlIG3DqW1vaXJlLiBMZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG7igJlow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPC9wPjxwPjxiPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZOKAmWF1dHJlcyBzb2x1dGlvbnMgcG91ciBhbcOpbGlvcmVyIHZvdHJlIGN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4uIFBvdXIgZW4gc2F2b2lyIHBsdXMsIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBleHBsYW5hdGlvbkVsZW1lbnRUeHQ6IFwiPHA+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBkZSA8Yj5yZWNldm9pciBwYXIgZS1tYWlsIMOgIGxhIGZyw6lxdWVuY2UgY2hvaXNpZSwgZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXM8L2I+IGV0IHBvcnRhbnQgc3VyIGRlcyBzdWpldHMgdHLDqHMgdmFyacOpcyBkZSA8Yj5jdWx0dXJlIGfDqW7DqXJhbGU8L2I+IChhcnRzLCBoaXN0b2lyZSwgbGl0dMOpcmF0dXJlLCBzY2llbmNlcywgZXRjLikuPC9wPjxwPkNlcyBhcnRpY2xlcyBzb250IGJhc8OpcyBzdXIgPGI+dW5lIG91IHBsdXNpZXVycyBwYWdlcyBkZSBXaWtpcMOpZGlhPC9iPiAoZm91cm5pZXMgZW4gbGllbiksIGRvbnQgPGI+aWxzIGV4dHJhaWVudCBjZXJ0YWluZXMgaW5mb3JtYXRpb25zPC9iPi48L3A+PHA+Q2hhcXVlIHPDqXJpZSBk4oCZYXJ0aWNsZXMgZXN0IDxiPnN1aXZpZSBk4oCZdW4gcXVpejwvYj4gcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPC9wPjxwPjxiPlZvdXMgYXBwcmVuZXogYWluc2kgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+IHRyw6hzIHNpbXBsZW1lbnQuPC9wPlwiLFxuICAgIC8qIEF1dHJlcyAqL1xuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICB0d2l0dGVyQWNjb3VudDogXCJXaWtpTGVybmlcIixcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG59OyIsIi8vIC0tIEdFU1RJT04gRFUgRk9STVVMQUlSRSBQRVJNRVRUQU5UIERFIFNFIENPTk5FQ1RFUlxuXG4vLy8gTCd1dGlsaXNhdGV1ciBwZXV0IGF2b2lyIHLDqXBvbmR1IMOgIHVuIHF1aXogYXZhbnQgZCdhcnJpdmVyIHN1ciBsYSBwYWdlIGRlIGNvbm5leGlvbi5cbi8vLyBEYW5zIGNlIGNhcyBpbCBmYXV0IGVucmVnaXN0cmVyIHNvbiByw6lzdWx0YXQgZW4gbcOqbWUgdGVtcHMsIHVuZSBmb2lzIGxhIGNvbm5leGlvbiB2YWxpZMOpZS5cblxuLy8vIExlIGNvbm5leGlvbiBwZXV0IHNlIGZhaXJlIGRpcmVjdGVtZW50IGljaSB2aWEgbGEgc2Fpc2llIGQndW4gbW90IGRlIHBhc3NlIG91IHZpYSBsJ2Vudm9pIGQndW4gdG9rZW4gcGFyIGUtbWFpbC5cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIHRpcsOpcyBkdSBiYWNrZW5kIDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuaW1wb3J0IHsgY29ubmVjdGlvblJvdXRlLCBnZXRMb2dpbkxpbmtSb3V0ZSwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi9jb25maWcvdXNlcnMuanNcIjtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBJbXBvcnRhdGlvbiBkZXMgZm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldERhdGFzRnJvbUlucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGxvYWRNYXRvbW8gfSBmcm9tIFwiLi90b29scy9tYXRvbW8uanNcIjtcbmltcG9ydCB7IGNoZWNrQW5zd2VyRGF0YXMsIGNoZWNrU2Vzc2lvbiwgZ2V0VGltZURpZmZlcmVuY2UsIHNldFNlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHsgc2VydmVyRXJyb3IgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHsgYWxyZWFkeUNvbm5lY3RlZCwgbmVlZENob29zZUxvZ2luV2F5IH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBteUZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbm5lY3Rpb25cIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuXG5oZWxsb0RldigpO1xuXG4vLyBUZXN0IGRlIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyICsgYWZmaWNoYWdlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbi5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKCk7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCB7IG1lc3NhZ2U6IGFscmVhZHlDb25uZWN0ZWQsIGNvbG9yOlwiaW5mb1wiIH0pOy8vIHBvdXIgbCdhZmZpY2hlciBzdXIgbGEgcGFnZSBzdWl2YW50ZVxuICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgaG9tZVBhZ2U9dXNlci5zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbG9hZE1hdG9tbygpO1xuICAgICAgICAgICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoZ2V0TG9jYWx5KFwibWVzc2FnZVwiKSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5tZXNzYWdlLCBcIlwiLCBbZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5jb2xvcl0pO1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gICAgIFxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpO1xuXG4vLyBUcmFpdGVtZW50IGRlIGwnZW52b2kgZGVzIGRvbm7DqWVzIGRlIGNvbm5leGlvbiA6XG5teUZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjsvLyBlZmZhY2UgZCfDqXZlbnR1ZWxzIG1lc3NhZ2VzIGTDqWrDoCBhZmZpY2jDqXNcbiAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhteUZvcm0pO1xuICAgICAgICBpZihpc0VtcHR5KGRhdGFzLnBhc3N3b3JkKSAmJiBpc0VtcHR5KGRhdGFzLmdldExvZ2luTGluaykpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcImRpdlwiLCBuZWVkQ2hvb3NlTG9naW5XYXksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGRhdGFzLmdldExvZ2luTGluaykpXG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCt1c2VyUm91dGVzK2dldExvZ2luTGlua1JvdXRlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY29ubmVjdGlvblJvdXRlKTtcbiAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzcG9uc2UubWVzc2FnZSkpIFxuICAgICAgICAgICAgICAgICAgICAgICAgeyAgIC8vIGNhcyBkJ3VuZSBkZW1hbmRlIGRlIGxpZW4gZGUgY29ubmV4aW9uIGF2ZWMgc3VjY8Oocy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCFpc0VtcHR5KHJlc3BvbnNlLnVzZXJJZCkgJiYgIWlzRW1wdHkocmVzcG9uc2UuY29ubmV4aW9uVGltZSkgJiYgIWlzRW1wdHkocmVzcG9uc2UudG9rZW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgeyAgIC8vIGNhcyBkJ3VuZSBjb25uZXhpb24gdmlhIG1vdCBkZSBwYXNzZSBhdmVjIHN1Y2PDqHMgOiBvbiBjcsOpZSB1bmUgc2Vzc2lvbiBkZSBjb25uZXhpb24gZXQgcmVkaXJpZ2UgbCd1dGlsaXNhdGV1ci5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uTWF4VGltZT1EYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmNvbm5leGlvblRpbWUuZW5kc1dpdGgoXCJkYXlzXCIpKS8vIGwndXRpbGlzYXRldXIgYSBkZW1hbmTDqSDDoCByZXN0ZXIgY29ubmVjdMOpIHN1ciBsYSBkdXLDqWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbk1heFRpbWUrPXBhcnNlSW50KHJlc3BvbnNlLmNvbm5leGlvblRpbWUsMTApKjI0KjM2MDAqMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbk1heFRpbWUrPXBhcnNlSW50KHJlc3BvbnNlLmNvbm5leGlvblRpbWUsMTApKjM2MDAqMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZXNzaW9uKHJlc3BvbnNlLnVzZXJJZCwgcmVzcG9uc2UudG9rZW4sIGNvbm5leGlvbk1heFRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcImxhc3RBbnN3ZXJcIik7Ly8gISBpbXBvcnRhbnQgcG91ciBuZSBwYXMgZW5yZWdpc3RlciBwbHVzaWV1cnMgZm9pcyBzb24gw6l2ZW50dWVsIHLDqXN1bHRhdCBhdSBxdWl6LiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGwndXRpbGlzYXRldXIgcGV1dCBhdm9pciB0ZW50w6kgZCdhY2PDqWRlciDDoCB1bmUgYXV0cmUgcGFnZSBxdWUgc2EgcGFnZSBkJ2FjY3VlaWwgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmw9Z2V0TG9jYWx5KFwidXJsXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHVybCkgJiYgdXJsLmhyZWYuaW5kZXhPZihzaXRlVXJsKSE9PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXVybC5ocmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1cmxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPWNvbmZpZ1RlbXBsYXRlW3Jlc3BvbnNlLnN0YXR1cytcIkhvbWVQYWdlXCJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGF0YXMudGltZURpZmZlcmVuY2U9Z2V0VGltZURpZmZlcmVuY2UoKTtcbiAgICAgICAgICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgw6AgdW4gcXVpeiwgaidham91dGUgbGVzIGluZm9zIGRlIHNvbiByw6lzdWx0YXQgYXV4IGRvbm7DqWVzIGVudm95w6llcyA6XG4gICAgICAgICAgICAgICAgZGF0YXM9Y2hlY2tBbnN3ZXJEYXRhcyhkYXRhcyk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufSk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/deconnection.app.js b/front/public/JS/deconnection.app.js index f2e2304..a3a923f 100644 --- a/front/public/JS/deconnection.app.js +++ b/front/public/JS/deconnection.app.js @@ -698,56 +698,37 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/dom.js */ "./src/tools/dom.js"); /* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/everywhere.js */ "./src/tools/everywhere.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DE LA PAGE DE DÉCONNEXION /// On se contente ici de supprimer la session stockée côté client // Fichier de configuration côté client : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; // Importation des fonctions utile au script : +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; // Importation des fonctions utile au script : // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require.serverError; +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - byebyeMessage = _require2.byebyeMessage; +const { + byebyeMessage +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); -var divResponse = document.getElementById("response"); +const divResponse = document.getElementById("response"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - try { - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("user"); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("url"); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", byebyeMessage, "", ["success"]); - } catch (e) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - } - - case 1: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); +const initialise = async () => { + try { + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("user"); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("url"); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", byebyeMessage, "", ["success"]); + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + } +}; initialise(); @@ -767,14 +748,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -792,32 +772,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
"); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -841,17 +810,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVjb25uZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImRpdlJlc3BvbnNlIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsInJlbW92ZUxvY2FseSIsImFkZEVsZW1lbnQiLCJlIiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldExvY2FseSIsImpzb24iLCJwYXJzZSIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImNvbnNvbGUiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsImhvbWVQYWdlIiwiaHJlZiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsbUNBQUQsQ0FBckI7O0FBQ0EsSUFBTUMsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLHFEQUFELENBQTlCOztBQUVBRSxNQUFNLENBQUNDLE9BQVA7QUFFSUMsUUFBTSxFQUFFLDJCQUZaO0FBR0lDLFNBQU8sRUFBRSx1QkFIYjtBQUlJQyxXQUFTLEVB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eEIsQ0FBWDtBQUNBLE1BQU13QyxRQUFRLEdBQUNILE1BQU0sR0FBQyxVQUF0QjtBQUNBRSxNQUFJLENBQUNFLElBQUwsR0FBVSxNQUFJSCxjQUFjLENBQUNFLFFBQUQsQ0FBNUI7QUFDSCxDQUxNLEMiLCJmaWxlIjoiLi9KUy9kZWNvbm5lY3Rpb24uYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZGVjb25uZWN0aW9uLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsIi8vIC0tIEdFU1RJT04gREUgTEEgUEFHRSBERSBEw4lDT05ORVhJT05cblxuLy8vIE9uIHNlIGNvbnRlbnRlIGljaSBkZSBzdXBwcmltZXIgbGEgc2Vzc2lvbiBzdG9ja8OpZSBjw7R0w6kgY2xpZW50XG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgcmVtb3ZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBieWVieWVNZXNzYWdlIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5cbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICByZW1vdmVMb2NhbHkoXCJ1cmxcIik7XG4gICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBieWVieWVNZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTsgICAgICAgIFxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVjb25uZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImRpdlJlc3BvbnNlIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsInJlbW92ZUxvY2FseSIsImFkZEVsZW1lbnQiLCJlIiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldExvY2FseSIsImpzb24iLCJwYXJzZSIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImNvbnNvbGUiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsImhvbWVQYWdlIiwiaHJlZiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsbUNBQUQsQ0FBckI7O0FBQ0EsSUFBTUMsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLHFEQUFELENBQTlCOztBQUVBRSxNQUFNLENBQUNDLE9BQVA7QUFFSUMsUUFBTSxFQUFFLDJCQUZaO0FBR0lDLFNBQU8sRUFBRSx1QkFIYjtBQUlJQyxXQUFTLEVB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O0FBQ0gsQ0FMTSxDIiwiZmlsZSI6Ii4vSlMvZGVjb25uZWN0aW9uLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2RlY29ubmVjdGlvbi5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCIvLyAtLSBHRVNUSU9OIERFIExBIFBBR0UgREUgRMOJQ09OTkVYSU9OXG5cbi8vLyBPbiBzZSBjb250ZW50ZSBpY2kgZGUgc3VwcHJpbWVyIGxhIHNlc3Npb24gc3RvY2vDqWUgY8O0dMOpIGNsaWVudFxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IHJlbW92ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHsgc2VydmVyRXJyb3IgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHsgYnllYnllTWVzc2FnZSB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXJsXCIpO1xuICAgICAgICByZW1vdmVMb2NhbHkoXCJtZXNzYWdlXCIpO1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgYnllYnllTWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7ICAgICAgICBcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/front/public/JS/deleteValidation.app.js b/front/public/JS/deleteValidation.app.js index c858421..1f8afca 100644 --- a/front/public/JS/deleteValidation.app.js +++ b/front/public/JS/deleteValidation.app.js @@ -974,23 +974,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/matomo.js */ "./src/tools/matomo.js"); /* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DE LA PAGE PERMETTANT DE VALIDER LA DEMANDE DE SUPPRESSION DE SON COMPTE /// Un token est transmis en paramètre de l'Url. Il a une validité limitée dans le temps. /// Si le token est ok, on valide la suppression, supprime la session de l'utilisateur et affiche un message de confirmation. // Fichier de configuration côté client : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var _require = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"), - accountPage = _require.accountPage; +const { + accountPage +} = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.js"), - checkDeleteLinkRoute = _require2.checkDeleteLinkRoute, - userRoutes = _require2.userRoutes; // Importation des fonctions utile au script : +const { + checkDeleteLinkRoute, + userRoutes +} = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // Importation des fonctions utile au script : @@ -1000,63 +998,47 @@ var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.j // Dictionnaires : -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require3.serverError; +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require4 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - badLinkValidationMessage = _require4.badLinkValidationMessage; +const { + badLinkValidationMessage +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); -var divResponse = document.getElementById("response"); +const divResponse = document.getElementById("response"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var datas, xhr; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - try { - datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_5__["getUrlParams"])(); +const initialise = async () => { + try { + const datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_5__["getUrlParams"])(); - if (datas && datas.t !== undefined) { - xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + checkDeleteLinkRoute + datas.t); + if (datas && datas.t !== undefined) { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + checkDeleteLinkRoute + datas.t); - xhr.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + xhr.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - if (this.status === 200 && response.message != undefined) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("user"); - } else if (this.status === 400 && response.errors != undefined) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", badLinkValidationMessage.replace("#URL", accountPage), "", ["error"]); - } - }; - - xhr.setRequestHeader("Authorization", "Bearer " + datas.t); - xhr.send(); - } - } catch (e) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - console.error(e); - } - - case 1: - case "end": - return _context.stop(); + if (this.status === 200 && response.message != undefined) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("user"); + } else if (this.status === 400 && response.errors != undefined) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", badLinkValidationMessage.replace("#URL", accountPage), "", ["error"]); } - } - }, _callee); - })); + }; - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + xhr.setRequestHeader("Authorization", "Bearer " + datas.t); + xhr.send(); + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + console.error(e); + } +}; initialise(); @@ -1076,14 +1058,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1101,32 +1082,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
"); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1150,13 +1120,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1176,7 +1146,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__); // Fonction chargeant le code matomo -var loadMatomo = function loadMatomo() { +const loadMatomo = () => { // chargement de matomo var _paq = window._paq = window._paq || []; //ajout cnil : @@ -1236,14 +1206,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); // Fonction récupérant les paramètres passés par l'url -var getUrlParams = function getUrlParams() { +const getUrlParams = () => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); + const parameters = location.search.substring(1).split("&"); if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, + let param, datas = {}; - for (var i in parameters) { + for (let i in parameters) { param = parameters[i].split("="); if (param.length === 2) datas[param[0]] = decodeURI(param[1]); } @@ -1273,27 +1243,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1302,11 +1268,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1320,96 +1286,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1418,4 +1356,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9kZWxldGVWYWxpZGF0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwibWF0b21vIiwidXJsIiwic2l0ZUlkIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExhbmd1YWdlIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJkaXZSZXNwb25zZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJkYXRhcyIsImdldFVybFBhcmFtcyIsInQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwibWVzc2FnZSIsImFkZEVsZW1lbnQiLCJyZW1vdmVMb2NhbHkiLCJlcnJvcnMiLCJBcnJheSIsImlzQXJyYXkiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJnZXRMb2NhbHkiLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImxvZyIsInVwZGF0ZUFjY291bnRMaW5rIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiaG9tZVBhZ2UiLCJsb2FkTWF0b21vIiwiX3BhcSIsIndpbmRvdyIsInB1c2giLCJzZWxmIiwiZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCIsIm5vdyIsIm5vd1RzIiwicm91bmQiLCJnZXRUaW1lIiwidmlzaXRvckluZm8iLCJnZXRWaXNpdG9ySW5mbyIsImNyZWF0ZVRzIiwicGFyc2VJbnQiLCJjb29raWVUaW1lb3V0Iiwib3JpZ2luYWxUaW1lb3V0Iiwic2V0VmlzaXRvckNvb2tpZVRpbWVvdXQiLCJ1IiwiZCIsImciLCJzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0eXBlIiwiYXN5bmMiLCJzcmMiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibG9jYXRpb24iLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwidG9rZW4iLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsImNoZWNrU2Vzc2lvbiIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ1c2VyIiwib25sb2FkIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIiwiYXNzaWduIiwib25lcnJvciIsInN0YXR1c1RleHQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFD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RmlCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVpnRixZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTU8sWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ04sY0FBRCxFQUFpQnhGLE9BQWpCLEVBQTBCeUYsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUNsTSwyREFBTyxDQUFDeUcsT0FBRCxDQUFYLEVBQ0lXLG9FQUFVLENBQUMsU0FBRCxFQUFZWCxPQUFaLENBQVY7QUFDSixNQUFHLENBQUN6RywyREFBTyxDQUFDa00sU0FBRCxDQUFYLEVBQ0k5RSxvRUFBVSxDQUFDLEtBQUQsRUFBUThFLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ2xNLDJEQUFPLENBQUNpTSxjQUFELENBQVgsRUFDSS9DLE1BQU0sQ0FBQ3lCLFFBQVAsQ0FBZ0JxQyxNQUFoQixDQUF1QmYsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9kZWxldGVWYWxpZGF0aW9uLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2RlbGV0ZVZhbGlkYXRpb24uanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwiLy8gU2kgbm9uIHV0aWxpc8OpLCBzdXBwcmltZXIgbCdhcHBlbCBkZXMgSlMgZnJvbnQtZW5kIHB1aXMgcmVjb21waWxlci5cbi8vIFJldm9pciBjb21tZW50IHLDqW9yZ2FuaXNlciBjZWxhIHNvdXMtZm9ybWUgZGUgbW9kdWxlIGluZMOpcGVuZGFudC5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBTdGF0cyBNYXRvbW8gOlxuICAgIG1hdG9tbzogeyB1cmw6IFwiaHR0cHM6Ly9zdGF0cy5sZS1mYWItbGFiLmNvbS9cIiwgc2l0ZUlkOiBcIjVcIiB9LFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gR0VTVElPTiBERSBMQSBQQUdFIFBFUk1FVFRBTlQgREUgVkFMSURFUiBMQSBERU1BTkRFIERFIFNVUFBSRVNTSU9OIERFIFNPTiBDT01QVEVcblxuLy8vIFVuIHRva2VuIGVzdCB0cmFuc21pcyBlbiBwYXJhbcOodHJlIGRlIGwnVXJsLiBJbCBhIHVuZSB2YWxpZGl0w6kgbGltaXTDqWUgZGFucyBsZSB0ZW1wcy5cbi8vLyBTaSBsZSB0b2tlbiBlc3Qgb2ssIG9uIHZhbGlkZSBsYSBzdXBwcmVzc2lvbiwgc3VwcHJpbWUgbGEgc2Vzc2lvbiBkZSBsJ3V0aWxpc2F0ZXVyIGV0IGFmZmljaGUgdW4gbWVzc2FnZSBkZSBjb25maXJtYXRpb24uXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IHsgYWNjb3VudFBhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmNvbnN0IHsgY2hlY2tEZWxldGVMaW5rUm91dGUsIHVzZXJSb3V0ZXMgfSA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvdXNlcnNcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBsb2FkTWF0b21vIH0gZnJvbSBcIi4vdG9vbHMvbWF0b21vLmpzXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICBpZihkYXRhcyAmJiBkYXRhcy50IT09dW5kZWZpbmVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrRGVsZXRlTGlua1JvdXRlK2RhdGFzLnQpO1xuICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSA0MDAgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBhY2NvdW50UGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrZGF0YXMudCk7IFxuICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IG1hdG9tbyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvbWF0b21vLmpzXCI7XG5cbi8vIEZvbmN0aW9uIGNoYXJnZWFudCBsZSBjb2RlIG1hdG9tb1xuZXhwb3J0IGNvbnN0IGxvYWRNYXRvbW8gPSAoKSA9Plxue1xuICAgIC8vIGNoYXJnZW1lbnQgZGUgbWF0b21vXG4gICAgdmFyIF9wYXEgPSB3aW5kb3cuX3BhcSA9IHdpbmRvdy5fcGFxIHx8IFtdO1xuICAgIC8vYWpvdXQgY25pbCAgOlxuICAgIF9wYXEucHVzaChbZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBmdW5jdGlvbiBnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0KClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBub3dUcyA9IE1hdGgucm91bmQobm93LmdldFRpbWUoKSAvIDEwMDApLFxuICAgICAgICAgICAgdmlzaXRvckluZm8gPSBzZWxmLmdldFZpc2l0b3JJbmZvKCk7XG4gICAgICAgICAgICB2YXIgY3JlYXRlVHMgPSBwYXJzZUludCh2aXNpdG9ySW5mb1syXSk7XG4gICAgICAgICAgICB2YXIgY29va2llVGltZW91dCA9IDMzNjk2MDAwOyAvLyAxMyBtb2lzIGVuIHNlY29uZGVzXG4gICAgICAgICAgICB2YXIgb3JpZ2luYWxUaW1lb3V0ID0gY3JlYXRlVHMgKyBjb29raWVUaW1lb3V0IC0gbm93VHM7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmlzaXRvckNvb2tpZVRpbWVvdXQoIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKSApO1xuICAgIH1dKTtcbiAgICAvLy0tZmluIGFqb3V0IGNuaWxcbiAgICBfcGFxLnB1c2goWyd0cmFja1BhZ2VWaWV3J10pO1xuICAgIF9wYXEucHVzaChbJ2VuYWJsZUxpbmtUcmFja2luZyddKTtcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB1PW1hdG9tby51cmw7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFRyYWNrZXJVcmwnLCB1KydtYXRvbW8ucGhwJ10pO1xuICAgICAgICBfcGFxLnB1c2goWydzZXRTaXRlSWQnLCBtYXRvbW8uc2l0ZUlkXSk7XG4gICAgICAgIHZhciBkPWRvY3VtZW50LCBnPWQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XG4gICAgICAgIGcudHlwZT0ndGV4dC9qYXZhc2NyaXB0JzsgZy5hc3luYz10cnVlOyBnLnNyYz11KydtYXRvbW8uanMnOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGcscyk7XG4gICAgfSkoKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXogb3UgZCd1biBncm91cGUgZGUgcXVpenNcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICAgICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkYXRhcy5Hcm91cElkPWFuc3dlci5Hcm91cElkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9kZWxldGVWYWxpZGF0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwibWF0b21vIiwidXJsIiwic2l0ZUlkIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExhbmd1YWdlIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJkaXZSZXNwb25zZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJkYXRhcyIsImdldFVybFBhcmFtcyIsInQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwibWVzc2FnZSIsImFkZEVsZW1lbnQiLCJyZW1vdmVMb2NhbHkiLCJlcnJvcnMiLCJBcnJheSIsImlzQXJyYXkiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJnZXRMb2NhbHkiLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImxvZyIsInVwZGF0ZUFjY291bnRMaW5rIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiaG9tZVBhZ2UiLCJsb2FkTWF0b21vIiwiX3BhcSIsIndpbmRvdyIsInB1c2giLCJzZWxmIiwiZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCIsIm5vdyIsIm5vd1RzIiwicm91bmQiLCJnZXRUaW1lIiwidmlzaXRvckluZm8iLCJnZXRWaXNpdG9ySW5mbyIsImNyZWF0ZVRzIiwicGFyc2VJbnQiLCJjb29raWVUaW1lb3V0Iiwib3JpZ2luYWxUaW1lb3V0Iiwic2V0VmlzaXRvckNvb2tpZVRpbWVvdXQiLCJ1IiwiZCIsImciLCJzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0eXBlIiwiYXN5bmMiLCJzcmMiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibG9jYXRpb24iLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwidG9rZW4iLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsImNoZWNrU2Vzc2lvbiIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ1c2VyIiwib25sb2FkIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIiwiYXNzaWduIiwib25lcnJvciIsInN0YXR1c1RleHQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFD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QUFELENBQVgsRUFDSTlFLG9FQUFVLENBQUMsS0FBRCxFQUFROEUsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDbE0sMkRBQU8sQ0FBQ2lNLGNBQUQsQ0FBWCxFQUNJL0MsTUFBTSxDQUFDeUIsUUFBUCxDQUFnQnFDLE1BQWhCLENBQXVCZixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2RlbGV0ZVZhbGlkYXRpb24uYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZGVsZXRlVmFsaWRhdGlvbi5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCIvLyBTaSBub24gdXRpbGlzw6ksIHN1cHByaW1lciBsJ2FwcGVsIGRlcyBKUyBmcm9udC1lbmQgcHVpcyByZWNvbXBpbGVyLlxuLy8gUmV2b2lyIGNvbW1lbnQgcsOpb3JnYW5pc2VyIGNlbGEgc291cy1mb3JtZSBkZSBtb2R1bGUgaW5kw6lwZW5kYW50LlxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIFN0YXRzIE1hdG9tbyA6XG4gICAgbWF0b21vOiB7IHVybDogXCJodHRwczovL3N0YXRzLmxlLWZhYi1sYWIuY29tL1wiLCBzaXRlSWQ6IFwiNVwiIH0sXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBHRVNUSU9OIERFIExBIFBBR0UgUEVSTUVUVEFOVCBERSBWQUxJREVSIExBIERFTUFOREUgREUgU1VQUFJFU1NJT04gREUgU09OIENPTVBURVxuXG4vLy8gVW4gdG9rZW4gZXN0IHRyYW5zbWlzIGVuIHBhcmFtw6h0cmUgZGUgbCdVcmwuIElsIGEgdW5lIHZhbGlkaXTDqSBsaW1pdMOpZSBkYW5zIGxlIHRlbXBzLlxuLy8vIFNpIGxlIHRva2VuIGVzdCBvaywgb24gdmFsaWRlIGxhIHN1cHByZXNzaW9uLCBzdXBwcmltZSBsYSBzZXNzaW9uIGRlIGwndXRpbGlzYXRldXIgZXQgYWZmaWNoZSB1biBtZXNzYWdlIGRlIGNvbmZpcm1hdGlvbi5cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgeyBhY2NvdW50UGFnZSB9ID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuY29uc3QgeyBjaGVja0RlbGV0ZUxpbmtSb3V0ZSwgdXNlclJvdXRlcyB9ID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGxvYWRNYXRvbW8gfSBmcm9tIFwiLi90b29scy9tYXRvbW8uanNcIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBzZXRTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB7IHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uc3QgZGF0YXM9Z2V0VXJsUGFyYW1zKCk7XG4gICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tEZWxldGVMaW5rUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09IDQwMCAmJiByZXNwb25zZS5lcnJvcnMgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSBzZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlLnJlcGxhY2UoXCIjVVJMXCIsIGFjY291bnRQYWdlKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIitkYXRhcy50KTsgXG4gICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/group.app.js b/front/public/JS/group.app.js index 0a6e22b..3494972 100644 --- a/front/public/JS/group.app.js +++ b/front/public/JS/group.app.js @@ -934,10 +934,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tools/matomo.js */ "./src/tools/matomo.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DU FORMULAIRE PERMETTANT D'AFFICHER ET RÉPONDRE À UN GROUPE DE QUIZS /// Il n'est pas nécessaire d'être connecté pour répondre au quiz et voir son résultat. /// Mais si pas connecté, on propose à l'internaute de se connecter ou de créer un compte pour sauvegarder son résultat. @@ -945,10 +941,10 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Si il est connecté, l'enregistrement de son résultat se fait automatiquement côté serveur et ses éventuels précédents résultats sont affichés. // Fichier de configuration tirés du backend : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); @@ -959,82 +955,57 @@ var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + lang + "/answer"), - noPreviousAnswer = _require.noPreviousAnswer, - previousAnswersLine = _require.previousAnswersLine, - previousAnswersStats = _require.previousAnswersStats, - previousAnswersTitle = _require.previousAnswersTitle, - responseSavedError = _require.responseSavedError, - wantToSaveResponses = _require.wantToSaveResponses; +const { + noPreviousAnswer, + previousAnswersLine, + previousAnswersStats, + previousAnswersTitle, + responseSavedError, + wantToSaveResponses +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + lang + "/answer"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require2.serverError; // Principaux éléments du DOM manipulés : +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); // Principaux éléments du DOM manipulés : -var btnSubmit = document.getElementById("checkResponses"); -var divResponse = document.getElementById("response"); -var explanationsTitle = document.getElementById("explanationsTitle"); -var explanationsContent = document.getElementById("explanationsContent"); -var myForm = document.getElementById("group"); // Affiche le bouton de soumission + déclenche le chronomètre mesurant la durée de la réponse. +const btnSubmit = document.getElementById("checkResponses"); +const divResponse = document.getElementById("response"); +const explanationsTitle = document.getElementById("explanationsTitle"); +const explanationsContent = document.getElementById("explanationsContent"); +const myForm = document.getElementById("group"); // Affiche le bouton de soumission + déclenche le chronomètre mesurant la durée de la réponse. -var chronoBegin = 0; +let chronoBegin = 0; -var beginAnswer = function beginAnswer() { +const beginAnswer = () => { chronoBegin = Date.now(); btnSubmit.style.display = "block"; }; -var isConnected, user; +let isConnected, user; -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - // Si JS activé, on affiche le bouton de soumission du formulaire : - beginAnswer(); - _context.next = 4; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_9__["checkSession"])(["user"]); +const initialise = async () => { + try { + // Si JS activé, on affiche le bouton de soumission du formulaire : + beginAnswer(); + isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_9__["checkSession"])(["user"]); // "user" car seuls les utilisateurs de base peuvent enregistrer leurs réponses aux quizs + // Si l'utilisateur est connecté et a déjà répondu à ce quiz, on affiche ses précédentes réponses à la place du texte servant à expliquer le topo aux nouveaux - case 4: - isConnected = _context.sent; + if (isConnected) { + user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_5__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_4__["updateAccountLink"])(user.status, configTemplate); // lien vers le compte adapté pour les utilisateurs connectés - // "user" car seuls les utilisateurs de base peuvent enregistrer leurs réponses aux quizs - // Si l'utilisateur est connecté et a déjà répondu à ce quiz, on affiche ses précédentes réponses à la place du texte servant à expliquer le topo aux nouveaux - if (isConnected) { - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_5__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_4__["updateAccountLink"])(user.status, configTemplate); // lien vers le compte adapté pour les utilisateurs connectés - - checkPreviousResponses(user); - } else Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_8__["loadMatomo"])(); - - _context.next = 11; - break; - - case 8: - _context.prev = 8; - _context.t0 = _context["catch"](0); - console.error(_context.t0); - - case 11: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 8]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + checkPreviousResponses(user); + } else Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_8__["loadMatomo"])(); + } catch (e) { + console.error(e); + } +}; initialise(); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_4__["helloDev"])(); // Traitement de l'envoi de la réponse de l'utilisateur : -var answer = {}; +let answer = {}; myForm.addEventListener("submit", function (e) { try { e.preventDefault(); @@ -1042,18 +1013,18 @@ myForm.addEventListener("submit", function (e) { divResponse.innerHTML = ""; // supprime les éventuels messages déjà affichés. - var userResponses = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_6__["getDatasFromInputs"])(myForm); + const userResponses = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_6__["getDatasFromInputs"])(myForm); answer.duration = Math.round((Date.now() - chronoBegin) / 1000); answer.nbQuestions = 0; answer.nbCorrectAnswers = 0; answer.GroupId = document.getElementById("groupId").value; // Les réponses sont regroupées par question, donc quand idQuestion change, on connaît le résultat pour la question précédente. // Pour qu'une réponse soit bonne, il faut cocher toutes les bonnes réponses (si QCM) à la question ET cocher aucune des mauvaises. - var idChoice, + let idChoice, idQuestion = "", goodResponse = false; - for (var item in userResponses) { + for (let item in userResponses) { if (item.startsWith("isCorrect_response_")) // = Nouvelle réponse possible. { idChoice = item.substring(item.lastIndexOf("_") + 1); @@ -1084,16 +1055,16 @@ myForm.addEventListener("submit", function (e) { if (goodResponse) answer.nbCorrectAnswers++; // Affichage du résultat, suivant si l'utilisateur est connecté ou pas et son score : - var getOuput = Object(_tools_answers_js__WEBPACK_IMPORTED_MODULE_2__["checkAnswerOuput"])(answer); + let getOuput = Object(_tools_answers_js__WEBPACK_IMPORTED_MODULE_2__["checkAnswerOuput"])(answer); if (isConnected) { // Si l'utilisateur est connecté, on passe son résultat au serveur pour le sauvegarder. - var xhrSaveAnswer = new XMLHttpRequest(); + const xhrSaveAnswer = new XMLHttpRequest(); xhrSaveAnswer.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_1__["groupRoutes"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_1__["saveAnswersRoute"]); xhrSaveAnswer.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var xhrResponse = JSON.parse(this.responseText); + let xhrResponse = JSON.parse(this.responseText); if (this.status === 201 && xhrResponse.message) { getOuput += "
" + xhrResponse.message.replace("#URL", configTemplate.userHomePage); @@ -1102,7 +1073,7 @@ myForm.addEventListener("submit", function (e) { window.location.hash = ""; - var here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... + const here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... window.location.hash = "explanations"; } @@ -1124,18 +1095,16 @@ myForm.addEventListener("submit", function (e) { window.location.hash = ""; - var here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... + const here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... window.location.hash = "response"; } // + Affichage des textes d'explications pour chaque question - var explanations = document.querySelectorAll(".help"); + const explanations = document.querySelectorAll(".help"); - for (var i in explanations) { - if (explanations[i].style !== undefined) // sinon, la console affiche une erreur "TypeError: explanations[i].style is undefined", bien que tout fonctionne (?) - explanations[i].style.display = "block"; - } + for (let i in explanations) if (explanations[i].style !== undefined) // sinon, la console affiche une erreur "TypeError: explanations[i].style is undefined", bien que tout fonctionne (?) + explanations[i].style.display = "block"; } catch (e) { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", serverError, "", ["error"]); console.error(e); @@ -1143,26 +1112,26 @@ myForm.addEventListener("submit", function (e) { }); // Fonction vérifiant les précédentes réponses de l'utilisateur. // Utile si connecté lors du premier chargement de la page, puis après une nouvelle réponse. -var checkPreviousResponses = function checkPreviousResponses(user) { - var xhrPreviousRes = new XMLHttpRequest(); +const checkPreviousResponses = user => { + const xhrPreviousRes = new XMLHttpRequest(); xhrPreviousRes.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_1__["groupRoutes"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_1__["getPreviousAnswers"] + user.id + "/" + document.getElementById("groupId").value); xhrPreviousRes.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 200) { - var nbResponses = response.length; - var previousAnswersContent = ""; + const nbResponses = response.length; + let previousAnswersContent = ""; Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(explanationsTitle, "span", previousAnswersTitle.replace("#NOM", user.name)); if (nbResponses !== 0) { - var totNbQuestions = 0, + let totNbQuestions = 0, totNbCorrectAnswers = 0, totDuration = 0, mapLineContent; - for (var i in response) { + for (let i in response) { totNbQuestions += response[i].nbQuestions; // ! on ne peut se baser sur la version actuelle du quiz, car le nombre de questions a pu évoluer. totNbCorrectAnswers += response[i].nbCorrectAnswers; @@ -1210,30 +1179,30 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_1__); -var configFrontEnd = __webpack_require__(/*! ../config/general */ "./src/config/general.js"); +const configFrontEnd = __webpack_require__(/*! ../config/general */ "./src/config/general.js"); -var txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + configFrontEnd.lang + "/answer"); // Enregistrement côté client du dernier résultat à un quiz en attendant d'être connecté +const txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + configFrontEnd.lang + "/answer"); // Enregistrement côté client du dernier résultat à un quiz en attendant d'être connecté -var saveAnswer = function saveAnswer(answer) { +const saveAnswer = answer => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.GroupId))) { Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("lastAnswer", answer); return true; } else return false; }; // Retourne un texte suivant le nombre de bonnes réponses -var checkAnswerOuput = function checkAnswerOuput(answer) { +const checkAnswerOuput = answer => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions)) { - var ratio = answer.nbCorrectAnswers / answer.nbQuestions; - var mapObj = { + const ratio = answer.nbCorrectAnswers / answer.nbQuestions; + const mapObj = { DURATION: answer.duration, NBCORRECTANSWERS: answer.nbCorrectAnswers, NBQUESTIONS: answer.nbQuestions }; - var output = ""; + let output = ""; if (ratio < 0.4) output = Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["replaceAll"])(txt.checkResponsesOuputFail, mapObj);else if (ratio < 0.8) output = Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["replaceAll"])(txt.checkResponsesOuputMedium, mapObj);else output = Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["replaceAll"])(txt.checkResponsesOuputSuccess, mapObj); if (output) return output;else return ""; } else return ""; @@ -1255,14 +1224,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1280,32 +1248,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
"); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1329,13 +1286,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1356,25 +1313,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1382,49 +1331,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1445,7 +1372,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__); // Fonction chargeant le code matomo -var loadMatomo = function loadMatomo() { +const loadMatomo = () => { // chargement de matomo var _paq = window._paq = window._paq || []; //ajout cnil : @@ -1511,27 +1438,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1540,11 +1463,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1558,96 +1481,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1656,4 +1551,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvYW5zd2VyLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2dyb3VwLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9hbnN3ZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9tYXRvbW8uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiZGVmYXVsdFJlY2VpcHREYXlzIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsImZpZWxkTmV3UXVlc3Rpb25uYWlyZXMiLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbiIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4IiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmVzIiwiZGlyV2ViUXVlc3Rpb25uYWlyZXMiLCJtYXRvbW8iLCJ1cmwiLCJzaXRlSWQiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInJlZ2VuZXJhdGVIVE1MIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdyb3VwUm91dGVzIiwiZ2V0R3JvdXBSb3V0ZSIsInByZXZpZXdHcm91cFJvdXRlcyIsInNlYXJjaEdyb3Vwc1JvdXRlIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRBZG1pblN0YXRzIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwiLCJjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIiwiY2hlY2tSZXNwb25zZXNPdXB1dFN1Y2Nlc3MiLCJuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UiLCJuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNaW5OdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZE1pbk51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyU2Vjb25kZXNSZXNwb25zZSIsIm5vUHJldmlvdXNBbnN3ZXIiLCJwcmV2aW91c0Fuc3dlcnNMaW5lIiwicHJldmlvdXNBbnN3ZXJzU3RhdHMiLCJwcmV2aW91c0Fuc3dlcnNUaXRsZSIsInJlc3BvbnNlU2F2ZWRFcnJvciIsInJlc3BvbnNlU2F2ZWRNZXNzYWdlIiwic3RhdHNVc2VyIiwid2FudFRvU2F2ZVJlc3BvbnNlcyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwidXNlcnNHZXRDb25maWdVcmwiLCJjb25maWdUZW1wbGF0ZSIsImJ0blN1Ym1pdCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZSZXNwb25zZSIsImV4cGxhbmF0aW9uc1RpdGxlIiwiZXhwbGFuYXRpb25zQ29udGVudCIsIm15Rm9ybSIsImNocm9ub0JlZ2luIiwiYmVnaW5BbnN3ZXIiLCJub3ciLCJzdHlsZSIsImRpc3BsYXkiLCJpc0Nvbm5lY3RlZCIsInVzZXIiLCJpbml0aWFsaXNlIiwiY2hlY2tTZXNzaW9uIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJjaGVja1ByZXZpb3VzUmVzcG9uc2VzIiwibG9hZE1hdG9tbyIsImNvbnNvbGUiLCJlcnJvciIsImhlbGxvRGV2IiwiYW5zd2VyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImlubmVySFRNTCIsInVzZXJSZXNwb25zZXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJkdXJhdGlvbiIsInJvdW5kIiwibmJRdWVzdGlvbnMiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiR3JvdXBJZCIsImlkQ2hvaWNlIiwiaWRRdWVzdGlvbiIsImdvb2RSZXNwb25zZSIsIml0ZW0iLCJzdGFydHNXaXRoIiwibGFzdEluZGV4T2YiLCJwYXJlbnROb2RlIiwiY2xhc3NMaXN0IiwiYWRkIiwiZ2V0T3VwdXQiLCJjaGVja0Fuc3dlck91cHV0IiwieGhyU2F2ZUFuc3dlciIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwieGhyUmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJtZXNzYWdlIiwid2luZG93IiwibG9jYXRpb24iLCJoYXNoIiwiaGVyZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJzZW5kIiwic3RyaW5naWZ5Iiwic2F2ZUFuc3dlciIsImFkZEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZXhwbGFuYXRpb25zIiwicXVlcnlTZWxlY3RvckFsbCIsInhoclByZXZpb3VzUmVzIiwicmVzcG9uc2UiLCJuYlJlc3BvbnNlcyIsInByZXZpb3VzQW5zd2Vyc0NvbnRlbnQiLCJ0b3ROYlF1ZXN0aW9ucyIsInRvdE5iQ29ycmVjdEFuc3dlcnMiLCJ0b3REdXJhdGlvbiIsIm1hcExpbmVDb250ZW50IiwiREFURUFOU1dFUiIsImRhdGVGb3JtYXQiLCJjcmVhdGVkQXQiLCJOQkNPUlJFQ1RBTlNXRVJTIiwiTkJRVUVTVElPTlMiLCJBVkdEVVJBVElPTiIsInJlcGxhY2VBbGwiLCJBVkdDT1JSRUNUQU5TV0VSUyIsImNvbmZpZ0Zyb250RW5kIiwidHh0IiwiUXVlc3Rpb25uYWlyZUlkIiwic2F2ZUxvY2FseSIsInJhdGlvIiwiRFVSQVRJT04iLCJvdXRwdXQiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiaW5wdXRzQ29uZiIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImRhdGFzIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImVudHJpZXMiLCJlbnRyaWUiLCJlbXB5Rm9ybSIsInR5cGUiLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwiX3BhcSIsInB1c2giLCJzZWxmIiwiZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCIsIm5vd1RzIiwiZ2V0VGltZSIsInZpc2l0b3JJbmZvIiwiZ2V0VmlzaXRvckluZm8iLCJjcmVhdGVUcyIsInBhcnNlSW50IiwiY29va2llVGltZW91dCIsIm9yaWdpbmFsVGltZW91dCIsInNldFZpc2l0b3JDb29raWVUaW1lb3V0IiwidSIsImQiLCJnIiwicyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYXN5bmMiLCJzcmMiLCJpbnNlcnRCZWZvcmUiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIiwiYXNzaWduIiwib25lcnJvciIsInN0YXR1c1RleHQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLG1DQUFELENBQXJCOztBQUNBLElBQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQyxxREFBRCxDQUE5Qjs7QUFFQUUsTUFBTSxDQUFDQyxPQUFQO0FBRUlDLFFBQU0sRUFBRSwyQkFGWjtBQUdJQyxTQUFPLEVBQUUsdUJBSGI7QUFJSUMsV0FBUyxFQUFFLFNBSmY7QUFLSUMsWUFBVSxFQUFFLG1CQUxoQjtBQU1JQyxZQUFVLEVBQUUsbUJBTmhCO0FBT0lDLGFBQVcsRUFBRSx1QkFQakI7QUFRSUMsV0FBUyxFQUFFLElBUmY7QUFTSUMsT0FBSyxFQUFFLFdBVFg7QUFTd0I7QUFDcEJDLGdCQUFjLEVBQUUsQ0FBQyxJQUFELENBVnBCO0FBVTJCO0FBQ3ZCQyxVQUFRLEVBQUUsbUJBWGQ7QUFZSUMsb0JBQWtCLEVBQUUsSUFaeEI7QUFZOEI7QUFDMUJDLG9CQUFrQixFQUFFLEtBYnhCO0FBYStCO0FBQzNCQywwQkFBd0IsRUFBRSxHQWQ5QjtBQWNtQztBQUMvQkMsOEJBQTRCLEVBQUUsQ0FmbEM7QUFlcUM7QUFDakNDLGtDQUFnQyxFQUFFLEtBaEJ0QztBQWdCNkM7QUFDekNDLDJCQUF5QixFQUFFLElBakIvQjtBQWtCSUMsOEJBQTRCLEVBQUUsS0FsQmxDO0FBbUJJQyw2QkFBMkIsRUFBRSxVQW5CakM7QUFvQklDLCtCQUE2QixFQUFFLElBcEJuQztBQW9Cd0M7QUFDcENDLDRCQUEwQixFQUFFLElBckJoQztBQXNCSUMsZ0NBQThCLEVBQUUsUUF0QnBDO0FBc0I4QztBQUMxQ0MseUJBQXVCLEVBQUUsQ0F2QjdCO0FBdUIrQjtBQUMzQkMseUNBQXVDLEVBQUUsQ0F4QjdDO0FBeUJJQywwQ0FBd0MsRUFBRSxFQXpCOUM7QUEwQklDLDJDQUF5QyxFQUFFLENBMUIvQztBQTJCSUMsbUNBQWlDLEVBQUUsR0EzQnZDO0FBNEJJO0FBQ0FDLGdCQUFjLEVBQUUsQ0E3QnBCO0FBNkJ1QjtBQUNuQkMsZ0JBQWMsRUFBRSxDQTlCcEI7QUE4QnVCO0FBQ25CQyxjQUFZLEVBQUUsRUEvQmxCO0FBZ0NJQyxxQkFBbUIsRUFBRSxFQWhDekI7QUFnQzRCO0FBQ3hCQywrQkFBNkIsRUFBQyxDQWpDbEM7QUFpQ3FDO0FBQ2pDQyw2QkFBMkIsRUFBQyxFQWxDaEM7QUFrQ29DO0FBQ2hDQyxrQ0FBZ0MsRUFBRSxFQW5DdEM7QUFtQzBDO0FBQ3RDQyx5QkFBdUIsRUFBRSxDQXBDN0I7QUFxQ0lDLHdCQUFzQixFQUFHLGNBckM3QjtBQXFDNkM7QUFDekM7QUFDQUMsNEJBQTBCLEVBQUUsQ0F2Q2hDO0FBd0NJQyw0QkFBMEIsRUFBRSxDQXhDaEM7QUF5Q0k7QUFDQUMsb0JBQWtCLEVBQUUsQ0ExQ3hCO0FBMkNJQyxvQkFBa0IsRUFBRSxDQTNDeEI7QUE0Q0lDLDRCQUEwQixFQUFFLE9BNUNoQztBQTRDd0M7QUFDcENDLDBCQUF3QixFQUFFLENBQUUsV0FBRixFQUFlLFlBQWYsRUFBNkIsV0FBN0IsRUFBMEMsV0FBMUMsRUFBdUQsV0FBdkQsQ0E3QzlCO0FBOENJO0FBQ0FDLDJCQUF5QixFQUFFLEdBL0MvQjtBQWdESUMscUNBQW1DLEVBQUUsR0FoRHpDO0FBaURJO0FBQ0FDLFlBQVUsRUFBRSxDQWxEaEI7QUFtRElDLFlBQVUsRUFBRTtBQW5EaEIsc0RBcURvQixDQXJEcEIsc0RBc0RvQixDQXREcEIsb0RBdURrQixFQXZEbEIseURBeUR1QmpELEtBQUssQ0FBQ2tELFFBQU4sQ0FBZUMsU0F6RHRDLHFEQTBEbUJuRCxLQUFLLENBQUNvRCxhQTFEekIsNERBMkQwQnBELEtBQUssQ0FBQ3FELG9CQTNEaEMsOERBNEQ0Qm5ELGNBQWMsQ0FBQ29ELHNCQTVEM0MseURBNkR1QnBELGNBQWMsQ0FBQ3FELGlCQTdEdEMsbUVBOERpQ3JELGNBQWMsQ0FBQ3NELDJCQTlEaEQsNkRBK0QyQnRELGNBQWMsQ0FBQ3VELHFCQS9EMUMsNERBZ0UwQnZELGNBQWMsQ0FBQ3dELG9CQWhFekMsb0I7Ozs7Ozs7Ozs7O0FDSEE7QUFDQTtBQUNBdkQsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTtBQUNBdUQsUUFBTSxFQUFFO0FBQUVDLE9BQUcsRUFBRSwrQkFBUDtBQUF3Q0MsVUFBTSxFQUFFO0FBQWhEO0FBRlosQ0FEQSxDOzs7Ozs7Ozs7OztBQ0ZBMUQsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTtBQUNBMEQscUJBQW1CLEVBQUUsZ0JBRnpCO0FBRTBDO0FBQ3RDQywyQkFBeUIsRUFBRSw2QkFIL0I7QUFJSUMsd0JBQXNCLEVBQUUsTUFKNUI7QUFLSUMsOEJBQTRCLEVBQUcsWUFMbkM7QUFNSUMsd0JBQXNCLEVBQUcsU0FON0I7QUFPSUMsNEJBQTBCLEVBQUUsVUFQaEM7QUFRSUMsOEJBQTRCLEVBQUUsUUFSbEM7QUFTSUMsZ0JBQWMsRUFBRSxrQkFUcEI7QUFVSUMsZ0NBQThCLEVBQUcsY0FWckM7QUFXSUMsMkJBQXlCLEVBQUcsU0FYaEM7QUFZSTtBQUNBQyxhQUFXLEVBQUUsUUFiakI7QUFjSUMsZUFBYSxFQUFFLE9BZG5CO0FBZUlDLG9CQUFrQixFQUFFLFVBZnhCO0FBZ0JJQyxtQkFBaUIsRUFBRyxTQWhCeEI7QUFpQkk7QUFDQUMsZ0JBQWMsRUFBRSxZQWxCcEI7QUFtQkk7QUFDQUMsaUJBQWUsRUFBRSxlQXBCckI7QUFxQkk7QUFDQUMsZUFBYSxFQUFFLGlCQXRCbkI7QUF1QklDLG9CQUFrQixFQUFFLGdCQXZCeEI7QUF3QklDLGlCQUFlLEVBQUcsdUJBeEJ0QjtBQXdCOEM7QUFDMUNDLGtCQUFnQixFQUFFLFVBekJ0QjtBQXlCaUM7QUFDN0I7QUFDQUMsZUFBYSxFQUNiO0FBQ0lDLFNBQUssRUFBRTtBQUFFQyxlQUFTLEVBQUUsR0FBYjtBQUFrQkMsY0FBUSxFQUFFO0FBQTVCLEtBRFg7QUFFSUMsUUFBSSxFQUFFO0FBQUVGLGVBQVMsRUFBRTtBQUFiLEtBRlY7QUFFOEI7QUFDMUJHLGdCQUFZLEVBQUU7QUFBRUYsY0FBUSxFQUFFO0FBQVo7QUFIbEIsR0E1Qko7QUFpQ0lHLHNCQUFvQixFQUFHO0FBQUVyQyxhQUFTLEVBQUUsQ0FBYjtBQUFnQmtDLFlBQVEsRUFBRTtBQUExQixHQWpDM0I7QUFrQ0lJLE9BQUssRUFDTDtBQUNJTixTQUFLLEVBQUU7QUFBRUMsZUFBUyxFQUFFLEdBQWI7QUFBa0JDLGNBQVEsRUFBRTtBQUE1QixLQURYO0FBRUlDLFFBQUksRUFBRTtBQUFFRixlQUFTLEVBQUU7QUFBYixLQUZWLENBRThCOztBQUY5QixHQW5DSjtBQXVDSU0sVUFBUSxFQUNSO0FBQ0lDLFFBQUksRUFBRTtBQUFFUCxlQUFTLEVBQUUsR0FBYjtBQUFrQkMsY0FBUSxFQUFFO0FBQTVCLEtBRFY7QUFFSU8sUUFBSSxFQUFFO0FBQUVQLGNBQVEsRUFBRSxJQUFaO0FBQWtCUSxTQUFHLEVBQUMsQ0FBdEI7QUFBeUJDLGtCQUFZLEVBQUM7QUFBdEM7QUFGVixHQXhDSjtBQTRDSUMsUUFBTSxFQUNOO0FBQ0lKLFFBQUksRUFBRTtBQUFFUCxlQUFTLEVBQUUsR0FBYjtBQUFrQkMsY0FBUSxFQUFFO0FBQTVCO0FBRFYsR0E3Q0o7QUFnRElXLFFBQU0sRUFBRTtBQUFFN0MsYUFBUyxFQUFFLENBQWI7QUFBZ0JrQyxZQUFRLEVBQUU7QUFBMUIsR0FoRFo7QUFpRElZLGNBQVksRUFBRTtBQUFFOUMsYUFBUyxFQUFFLENBQWI7QUFBZ0JrQyxZQUFRLEVBQUU7QUFBMUIsR0FqRGxCO0FBa0RJO0FBQ0FhLGdCQUFjLEVBQUcsNkJBbkRyQjtBQW9ESTVDLHdCQUFzQixFQUFHLHNCQXBEN0I7QUFxRElDLG1CQUFpQixFQUFHLGdDQXJEeEI7QUFzREk0QyxjQUFZLEVBQUcsMkJBdERuQjtBQXVESTNDLDZCQUEyQixFQUFHLDRCQXZEbEM7QUF3REk7QUFDQTRDLGVBQWEsRUFBRyxzQkF6RHBCO0FBMERJM0MsdUJBQXFCLEVBQUcsbUJBMUQ1QjtBQTJESTRDLGFBQVcsRUFBRyxvQkEzRGxCO0FBNERJQyxhQUFXLEVBQUcsb0JBNURsQjtBQTZESTtBQUNBQyxjQUFZLEVBQUcsU0E5RG5CO0FBK0RJN0Msc0JBQW9CLEVBQUcsTUEvRDNCO0FBZ0VJOEMsWUFBVSxFQUFHLFFBaEVqQjtBQWlFSUMsWUFBVSxFQUFHLFFBakVqQjtBQWtFSTtBQUNBQyxpQkFBZSxFQUFHLENBbkV0Qjs7QUFvRUk7QUFDQTNFLGdCQUFjLEVBQUUsQ0FyRXBCO0FBc0VJQyxnQkFBYyxFQUFFLENBdEVwQjtBQXVFSUMsY0FBWSxFQUFFLEVBdkVsQjtBQXdFSTBFLFdBQVMsRUFBRSxDQXhFZjtBQXlFSUMsV0FBUyxFQUFFLENBekVmLENBeUVrQjs7QUF6RWxCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQXpHLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k7QUFDQXlHLFlBQVUsRUFBRSxPQUZoQjtBQUdJQyxzQkFBb0IsRUFBRSxpQkFIMUI7QUFJSUMseUJBQXVCLEVBQUUsY0FKN0I7QUFLSUMsaUJBQWUsRUFBRSxjQUxyQjtBQU1JQyx3QkFBc0IsRUFBRSxtQkFONUI7QUFPSUMsMEJBQXdCLEVBQUUsY0FQOUI7QUFRSUMsaUJBQWUsRUFBRSxRQVJyQjtBQVNJQyx5QkFBdUIsRUFBRSxpQkFUN0I7QUFVSUMsaUJBQWUsRUFBRSxTQVZyQjtBQVdJdkMsZUFBYSxFQUFFLGlCQVhuQjtBQVlJd0MsY0FBWSxFQUFFLGdCQVpsQjtBQWFJQyxtQkFBaUIsRUFBRSxpQkFidkI7QUFjSUMsbUJBQWlCLEVBQUUsZUFkdkI7QUFlSUMsYUFBVyxFQUFFLHlCQWZqQjtBQWdCSUMsY0FBWSxFQUFFLE9BaEJsQjtBQWlCSUMsNkJBQTJCLEVBQUUsMEJBakJqQztBQWlCNEQ7QUFDeERDLGlCQUFlLEVBQUUsVUFsQnJCO0FBbUJJQyx1QkFBcUIsRUFBRSxvQkFuQjNCO0FBb0JJQyxnQkFBYyxFQUFFLFNBcEJwQjtBQXFCSUMsa0JBQWdCLEVBQUUscUJBckJ0QjtBQXNCSUMsaUJBQWUsRUFBRSxVQXRCckI7QUF1QklDLG1CQUFpQixFQUFFLFlBdkJ2QjtBQXdCSTtBQUNBQyxNQUFJLEVBQUU7QUFBRTlDLGFBQVMsRUFBRSxFQUFiO0FBQWlCQyxZQUFRLEVBQUU7QUFBM0IsR0F6QlY7QUEwQkk4QyxPQUFLLEVBQUU7QUFBRS9DLGFBQVMsRUFBRSxHQUFiO0FBQWtCQyxZQUFRLEVBQUU7QUFBNUIsR0ExQlg7QUEyQkluQyxVQUFRLEVBQUU7QUFBRUMsYUFBUyxFQUFFLENBQWI7QUFBZ0JpQyxhQUFTLEVBQUMsRUFBMUI7QUFBOEJDLFlBQVEsRUFBRTtBQUF4QyxHQTNCZDtBQTJCOEQ7QUFDMUQrQyxhQUFXLEVBQUU7QUFBRWpGLGFBQVMsRUFBRSxDQUFiO0FBQWdCaUMsYUFBUyxFQUFDO0FBQTFCLEdBNUJqQjtBQTZCSWlELGVBQWEsRUFBRTtBQUFFakQsYUFBUyxFQUFFO0FBQWIsR0E3Qm5CO0FBOEJJa0QsT0FBSyxFQUFFO0FBQUVDLFNBQUssRUFBRSxNQUFUO0FBQWlCbEQsWUFBUSxFQUFFO0FBQTNCLEdBOUJYO0FBK0JJVyxRQUFNLEVBQUU7QUFBRTdDLGFBQVMsRUFBRSxDQUFiO0FBQWdCa0MsWUFBUSxFQUFFO0FBQTFCLEdBL0JaO0FBZ0NJbUQsbUJBQWlCLEVBQUUsQ0FBQyxHQWhDeEI7QUFpQ0lDLG1CQUFpQixFQUFFLEdBakN2QjtBQWtDSTtBQUNBckYsZUFBYSxFQUFHLGFBbkNwQjtBQW9DSUMsc0JBQW9CLEVBQUcsb0NBcEMzQjtBQXFDSXFGLDZCQUEyQixFQUFHO0FBckNsQyxDQURBLEM7Ozs7Ozs7Ozs7O0FDQUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUU7Ozs7Ozs7Ozs7O0FDdEJBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFOzs7Ozs7Ozs7OztBQ3RCQXZJLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0l1SSx5QkFBdUIsRUFBRyxrTEFEOUI7QUFFSUMsMkJBQXlCLEVBQUcsc0pBRmhDO0FBR0lDLDRCQUEwQixFQUFHLDZKQUhqQztBQUlJQyxtQ0FBaUMsRUFBRyw2REFKeEM7QUFLSUMsbUNBQWlDLEVBQUcsZ0VBTHhDO0FBTUlDLGdDQUE4QixFQUFHLHVGQU5yQztBQU9JQyw0QkFBMEIsRUFBRyxxRkFQakM7QUFRSUMsNEJBQTBCLEVBQUcsdUZBUmpDO0FBU0lDLDRCQUEwQixFQUFHLG1EQVRqQztBQVVJQyx5QkFBdUIsRUFBRyw2RUFWOUI7QUFXSUMsK0JBQTZCLEVBQUcsZ0ZBWHBDO0FBWUlDLCtCQUE2QixFQUFHLHVEQVpwQztBQWFJQywrQkFBNkIsRUFBRywrQ0FicEM7QUFjSUMsa0JBQWdCLEVBQUUsbUZBZHRCO0FBZUlDLHFCQUFtQixFQUFFLHFIQWZ6QjtBQWdCSUMsc0JBQW9CLEVBQUUsMEhBaEIxQjtBQWlCSUMsc0JBQW9CLEVBQUUsd0RBakIxQjtBQWtCSUMsb0JBQWtCLEVBQUcsZ0lBbEJ6QjtBQW1CSUMsc0JBQW9CLEVBQUcsZ0ZBbkIzQjtBQW9CSUMsV0FBUyxFQUFFLGdSQXBCZjtBQXFCSUMscUJBQW1CLEVBQUU7QUFyQnpCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQTVKLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k0SixXQUFTLEVBQUUsU0FEZjtBQUVJQyxjQUFZLEVBQUcsd0NBRm5CO0FBR0lDLGdCQUFjLEVBQUUsa0JBSHBCO0FBSUlDLFFBQU0sRUFBRywrQ0FKYjtBQUtJQyx3QkFBc0IsRUFBRyxZQUw3QjtBQU1JQyxzQkFBb0IsRUFBRSxpQkFOMUI7QUFPSUMscUJBQW1CLEVBQUUscUJBUHpCO0FBUUlDLGtCQUFnQixFQUFFLDhCQVJ0QjtBQVNJQyxjQUFZLEVBQUUsV0FUbEI7QUFVSUMsbUJBQWlCLEVBQUcsa0RBVnhCO0FBV0lDLGlCQUFlLEVBQUcsd0NBWHRCO0FBWUlDLFVBQVEsRUFBRyw0QkFaZjtBQWFJQyxjQUFZLEVBQUcscURBYm5CO0FBY0lDLGdCQUFjLEVBQUcsa0NBZHJCO0FBZUlDLFlBQVUsRUFBRywyQkFmakI7QUFnQklDLGVBQWEsRUFBRywyQ0FoQnBCO0FBaUJJQyxjQUFZLEVBQUcsc0RBakJuQjtBQWtCSUMsVUFBUSxFQUFHLGVBbEJmO0FBbUJJQyxZQUFVLEVBQUcsMkRBbkJqQjtBQW9CSUMsYUFBVyxFQUFHLGFBcEJsQjtBQXFCSUMsZ0JBQWMsRUFBRyxvQkFyQnJCO0FBc0JJQyxjQUFZLEVBQUcsaUJBdEJuQjtBQXVCSUMsYUFBVyxFQUFHLDRHQXZCbEI7QUF3QklDLGtCQUFnQixFQUFHLHdCQXhCdkI7QUF5QklDLGVBQWEsRUFBRyw0Q0F6QnBCO0FBMEJJQyxxQkFBbUIsRUFBRyxxTUExQjFCO0FBMkJJQyxtQkFBaUIsRUFBRyxtRUEzQnhCO0FBNEJJQyxrQkFBZ0IsRUFBRyx1RUE1QnZCO0FBNkJJQyxZQUFVLEVBQUcsbWhCQTdCakI7QUE4QklDLGtCQUFnQixFQUFFLGtCQTlCdEI7QUErQklDLGNBQVksRUFBRSxVQS9CbEI7QUFnQ0lDLGlCQUFlLEVBQUc7QUFoQ3RCLENBREEsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTtJQUVNQyxJOzs7Ozs7OzRCQUVhQyxLLEVBQ2Y7QUFDSSxVQUFHQSxLQUFLLEtBQUdDLFNBQVIsSUFBcUJELEtBQUssS0FBRyxJQUFoQyxFQUNJLE9BQU8sSUFBUCxDQURKLEtBR0E7QUFDSUEsYUFBSyxJQUFFLEVBQVAsQ0FESixDQUNjOztBQUNWQSxhQUFLLEdBQUNBLEtBQUssQ0FBQ0UsSUFBTixFQUFOO0FBQ0EsWUFBR0YsS0FBSyxLQUFHLEVBQVgsRUFDSSxPQUFPLElBQVAsQ0FESixLQUdJLE9BQU8sS0FBUDtBQUNQO0FBQ0o7OztrQ0FFb0JHLFEsRUFDckI7QUFDSSxVQUFHSixJQUFJLENBQUNLLE9BQUwsQ0FBYUQsUUFBYixDQUFILEVBQ0lBLFFBQVEsR0FBQyxJQUFULENBREosS0FHQTtBQUNJQSxnQkFBUSxJQUFFLEVBQVYsQ0FESixDQUNpQjs7QUFDYkEsZ0JBQVEsR0FBQ0EsUUFBUSxDQUFDRCxJQUFULEVBQVQ7QUFDSDtBQUNELGFBQU9DLFFBQVA7QUFDSDs7O3dDQUcwQkEsUSxFQUFVRSxHLEVBQ3JDO0FBQ0lGLGNBQVEsSUFBRSxFQUFWLENBREosQ0FDaUI7O0FBQ2QsVUFBR0EsUUFBUSxDQUFDRyxNQUFULEdBQWtCRCxHQUFyQixFQUNLRixRQUFRLEdBQUNBLFFBQVEsQ0FBQ0ksU0FBVCxDQUFtQixDQUFuQixFQUF1QkYsR0FBRyxHQUFDLENBQTNCLElBQStCLEdBQXhDO0FBQ0osYUFBT0YsUUFBUDtBQUNILEssQ0FFRDs7OzsrQkFDa0JBLFEsRUFBVUssTSxFQUM1QjtBQUNJLFVBQU1DLFdBQVcsR0FBRyxJQUFJQyxNQUFKLENBQVdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSixNQUFaLEVBQW9CSyxJQUFwQixDQUF5QixHQUF6QixDQUFYLEVBQXlDLElBQXpDLENBQXBCO0FBQ0EsYUFBT1YsUUFBUSxDQUFDVyxPQUFULENBQWlCTCxXQUFqQixFQUE4QixVQUFDTSxPQUFELEVBQ3JDO0FBQ0ksZUFBT1AsTUFBTSxDQUFDTyxPQUFELENBQWI7QUFDSCxPQUhNLENBQVA7QUFJSCxLLENBRUQ7Ozs7aUNBQ29CbkgsRyxFQUFLeUcsRyxFQUN6QjtBQUNJekcsU0FBRyxHQUFHb0gsSUFBSSxDQUFDQyxJQUFMLENBQVVySCxHQUFWLENBQU47QUFDQXlHLFNBQUcsR0FBR1csSUFBSSxDQUFDRSxLQUFMLENBQVdiLEdBQVgsQ0FBTjtBQUNBLGFBQU9XLElBQUksQ0FBQ0UsS0FBTCxDQUFXRixJQUFJLENBQUNHLE1BQUwsTUFBaUJkLEdBQUcsR0FBR3pHLEdBQXZCLENBQVgsSUFBMENBLEdBQWpEO0FBQ0gsSyxDQUVEOzs7OytCQUNrQndILFUsRUFDbEI7QUFBQSxVQUQ4QkMsSUFDOUIsdUVBRG1DLElBQ25DO0FBQ0ksVUFBR3RCLElBQUksQ0FBQ0ssT0FBTCxDQUFhZ0IsVUFBYixDQUFILEVBQ0ksT0FBTyxFQUFQO0FBQ0osVUFBSUUsTUFBTSxHQUFDLElBQUlDLElBQUosQ0FBU0gsVUFBVCxDQUFYO0FBQ0EsVUFBSUksS0FBSyxHQUFDRixNQUFNLENBQUNHLE9BQVAsS0FBaUIsRUFBM0I7QUFDQSxVQUFHRCxLQUFLLENBQUNsQixNQUFOLEtBQWUsQ0FBbEIsRUFDSWtCLEtBQUssR0FBQyxNQUFJQSxLQUFWO0FBQ0osVUFBSUUsUUFBUSxHQUFFSixNQUFNLENBQUNLLFFBQVAsS0FBa0IsQ0FBbkIsR0FBc0IsRUFBbkM7QUFDQSxVQUFHRCxRQUFRLENBQUNwQixNQUFULEtBQWtCLENBQXJCLEVBQ0lvQixRQUFRLEdBQUMsTUFBSUEsUUFBYjtBQUNKLFVBQUlFLE1BQU0sR0FBQ04sTUFBTSxDQUFDTyxXQUFQLEVBQVg7QUFDQSxVQUFHUixJQUFJLEtBQUcsSUFBVixFQUNJLE9BQU9HLEtBQUssR0FBQyxHQUFOLEdBQVVFLFFBQVYsR0FBbUIsR0FBbkIsR0FBdUJFLE1BQTlCLENBREosS0FFSyxJQUFJUCxJQUFJLEtBQUcsTUFBWCxFQUFrQjtBQUNuQixlQUFPTyxNQUFNLEdBQUMsR0FBUCxHQUFXRixRQUFYLEdBQW9CLEdBQXBCLEdBQXdCRixLQUEvQixDQURDLEtBR0QsT0FBT0UsUUFBUSxHQUFDLEdBQVQsR0FBYUYsS0FBYixHQUFtQixHQUFuQixHQUF1QkksTUFBOUI7QUFDUCxLLENBRUQ7QUFDQTs7OztnQ0FDb0JFLFEsRUFBVUMsUSxFQUM5QjtBQUNJLFVBQU1DLEtBQUssR0FBQ0YsUUFBUSxHQUFDZCxJQUFJLENBQUNFLEtBQUwsQ0FBV0YsSUFBSSxDQUFDRyxNQUFMLE1BQWVZLFFBQVEsR0FBQ0QsUUFBeEIsQ0FBWCxDQUFyQjtBQUNBLFVBQU1HLE9BQU8sR0FBQyxvREFBZDtBQUNBLFVBQU1DLE1BQU0sR0FBQyw4QkFBYjtBQUNBLFVBQUlqTCxRQUFRLEdBQUNnTCxPQUFPLENBQUNqQixJQUFJLENBQUNFLEtBQUwsQ0FBV0YsSUFBSSxDQUFDRyxNQUFMLEtBQWNjLE9BQU8sQ0FBQzNCLE1BQWpDLENBQUQsQ0FBcEI7O0FBQ0EsV0FBSSxJQUFJNkIsQ0FBQyxHQUFDLENBQVYsRUFBWUEsQ0FBQyxHQUFFSCxLQUFLLEdBQUMsQ0FBckIsRUFBd0JHLENBQUMsRUFBekIsRUFDQTtBQUNJLFlBQUlBLENBQUMsR0FBRyxDQUFMLEtBQVcsQ0FBZCxFQUNJbEwsUUFBUSxJQUFFaUwsTUFBTSxDQUFDbEIsSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxLQUFjZSxNQUFNLENBQUM1QixNQUFoQyxDQUFELENBQWhCLENBREosS0FHSXJKLFFBQVEsSUFBRWdMLE9BQU8sQ0FBQ2pCLElBQUksQ0FBQ0UsS0FBTCxDQUFXRixJQUFJLENBQUNHLE1BQUwsS0FBY2MsT0FBTyxDQUFDM0IsTUFBakMsQ0FBRCxDQUFqQjtBQUNQOztBQUNEckosY0FBUSxJQUFFZ0wsT0FBTyxDQUFDakIsSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxLQUFjYyxPQUFPLENBQUMzQixNQUFqQyxDQUFELENBQWpCO0FBQ0EsYUFBT3JKLFFBQVA7QUFDSDs7Ozs7O0FBR0wvQyxNQUFNLENBQUNDLE9BQVAsR0FBaUI0TCxJQUFqQixDOzs7Ozs7Ozs7OztBQ25HQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEOzs7Ozs7Ozs7OztBQ3ZCQTdMLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0lpTyxXQUFTLEVBQ1QsQ0FDSTtBQUFFQyxVQUFNLEVBQUUsU0FBVjtBQUFxQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQztBQUFQO0FBQWpDLEdBREosRUFFSTtBQUFFRixVQUFNLEVBQUUsWUFBVjtBQUF3QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxpQkFBUDtBQUEwQkMsUUFBRSxFQUFFO0FBQTlCO0FBQXBDLEdBRkosRUFHSTtBQUFFSCxVQUFNLEVBQUUsVUFBVjtBQUFzQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQztBQUFQO0FBQWxDLEdBSEosRUFJSTtBQUFFRixVQUFNLEVBQUUsU0FBVjtBQUFxQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQztBQUFQO0FBQWpDLEdBSkosQ0FGSjtBQVFJRSxXQUFTLEVBQ1QsQ0FDSTtBQUFFSixVQUFNLEVBQUUsU0FBVjtBQUFxQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQztBQUFQO0FBQWpDLEdBREosRUFFSTtBQUFFRixVQUFNLEVBQUUsa0JBQVY7QUFBOEJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsd0JBQVA7QUFBaUNHLFNBQUcsRUFBRTtBQUF0QztBQUExQyxHQUZKLEVBR0k7QUFBRUwsVUFBTSxFQUFFLHNCQUFWO0FBQWtDQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBOUMsR0FISixFQUlJO0FBQUVGLFVBQU0sRUFBRSxRQUFWO0FBQW9CQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLFdBQVA7QUFBb0JHLFNBQUcsRUFBRTtBQUF6QjtBQUFoQyxHQUpKLEVBS0k7QUFBRUwsVUFBTSxFQUFFLFFBQVY7QUFBb0JDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsV0FBUDtBQUFvQkcsU0FBRyxFQUFFO0FBQXpCO0FBQWhDLEdBTEosQ0FUSjtBQWdCSUMseUJBQXVCLEVBQUUsRUFoQjdCO0FBaUJJQyxjQUFZLEVBQUcsY0FqQm5CO0FBa0JJQyxlQUFhLEVBQUcsWUFsQnBCO0FBbUJJQyxpQkFBZSxFQUFHLGNBbkJ0QjtBQW9CSUMsZUFBYSxFQUFHLGtCQXBCcEI7QUFxQklDLGdCQUFjLEVBQUcsZ0JBckJyQjtBQXNCSUMsYUFBVyxFQUFFLGFBdEJqQjtBQXVCSUMsOEJBQTRCLEVBQUUsb0JBdkJsQztBQXdCSUMscUJBQW1CLEVBQUUsMkJBeEJ6QjtBQXlCSUMsOEJBQTRCLEVBQUcsRUF6Qm5DO0FBMEJJQyxpQkFBZSxFQUFHLGFBMUJ0QjtBQTJCSUMsWUFBVSxFQUFFLDBCQTNCaEI7QUE0QklDLFlBQVUsRUFBRSxzQkE1QmhCO0FBNkJJQyxRQUFNLEVBQUUsa1NBN0JaO0FBOEJJQyxZQUFVLEVBQUUsdUJBOUJoQjtBQStCSUMsUUFBTSxFQUFFLCtjQS9CWjtBQWdDSUMsd0JBQXNCLEVBQUUsMENBaEM1QjtBQWlDSUMsd0JBQXNCLEVBQUUsaURBakM1QjtBQWtDSUMsa0JBQWdCLEVBQUUsNEJBbEN0QjtBQW1DSUMsZ0JBQWMsRUFBRSwyaUNBbkNwQjtBQW9DSUMsa0JBQWdCLEVBQUUsK0ZBcEN0QjtBQXFDSUMsYUFBVyxFQUFFO0FBckNqQixDQURBLEM7Ozs7Ozs7Ozs7O0FDQUE5UCxNQUFNLENBQUNDLE9BQVAsR0FDQTtBQUNJO0FBQ0FpTyxXQUFTLEVBQ1QsQ0FDSTtBQUFFQyxVQUFNLEVBQUUsU0FBVjtBQUFxQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCRyxTQUFHLEVBQUU7QUFBN0I7QUFBakMsR0FESixFQUVJO0FBQUVMLFVBQU0sRUFBRSxXQUFWO0FBQXVCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLFNBQVA7QUFBa0JDLFFBQUUsRUFBQyxlQUFyQjtBQUFzQ3RKLFdBQUssRUFBQztBQUE1QztBQUFuQyxHQUZKLEVBR0k7QUFBRW1KLFVBQU0sRUFBRSxZQUFWO0FBQXdCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlCQUFQO0FBQTBCQyxRQUFFLEVBQUUsaUJBQTlCO0FBQWlEdEosV0FBSyxFQUFDO0FBQXZEO0FBQXBDLEdBSEosRUFJSTtBQUFFbUosVUFBTSxFQUFFLFVBQVY7QUFBc0JDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsZ0JBQVA7QUFBeUJySixXQUFLLEVBQUM7QUFBL0I7QUFBbEMsR0FKSixFQUtJO0FBQUVtSixVQUFNLEVBQUUsU0FBVjtBQUFxQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxHQUFQO0FBQVlySixXQUFLLEVBQUM7QUFBbEI7QUFBakMsR0FMSixDQUhKO0FBVUl1SixXQUFTLEVBQ1QsQ0FDSTtBQUFFSixVQUFNLEVBQUUsTUFBVjtBQUFrQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxpRUFBUDtBQUEwRXJKLFdBQUssRUFBQztBQUFoRjtBQUE5QixHQURKLEVBRUk7QUFBRW1KLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGVBQVA7QUFBd0JySixXQUFLLEVBQUM7QUFBOUI7QUFBakMsR0FGSixFQUdJO0FBQUVtSixVQUFNLEVBQUUsa0JBQVY7QUFBOEJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsd0JBQVA7QUFBaUNHLFNBQUcsRUFBRTtBQUF0QztBQUExQyxHQUhKLEVBSUk7QUFBRUwsVUFBTSxFQUFFLHNCQUFWO0FBQWtDQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGVBQVA7QUFBd0JySixXQUFLLEVBQUM7QUFBOUI7QUFBOUMsR0FKSixFQUtJO0FBQUVtSixVQUFNLEVBQUUsV0FBVjtBQUF1QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCRyxTQUFHLEVBQUU7QUFBN0I7QUFBbkMsR0FMSixDQVhKO0FBa0JJTyxhQUFXLEVBQUUsYUFsQmpCO0FBbUJJZ0IsV0FBUyxFQUFFLGVBbkJmO0FBb0JJcEIsZUFBYSxFQUFFLFlBcEJuQjtBQXFCSXFCLFNBQU8sRUFBRSxjQXJCYjtBQXNCSWxCLGdCQUFjLEVBQUcsZ0JBdEJyQjtBQXVCSW1CLGdCQUFjLEVBQUcsa0JBdkJyQjtBQXdCSUMsZUFBYSxFQUFHLGVBeEJwQjtBQXlCSXRCLGlCQUFlLEVBQUcsY0F6QnRCO0FBMEJJdUIsa0JBQWdCLEVBQUcsa0JBMUJ2QjtBQTJCSW5CLDhCQUE0QixFQUFFLG9CQTNCbEM7QUE0QklvQixjQUFZLEVBQUcsbUJBNUJuQjtBQTZCSXZCLGVBQWEsRUFBRyxrQkE3QnBCO0FBOEJJd0IsbUJBQWlCLEVBQUUsYUE5QnZCO0FBK0JJM0IsY0FBWSxFQUFHLGNBL0JuQjtBQWdDSTRCLGlCQUFlLEVBQUcsb0JBaEN0QjtBQWlDSXJCLHFCQUFtQixFQUFFLDJCQWpDekI7QUFrQ0lzQixvQkFBa0IsRUFBRyxvQkFsQ3pCOztBQW1DSTtBQUNBbkIsWUFBVSxFQUFFLDBCQXBDaEI7QUFxQ0lTLGtCQUFnQixFQUFFLCtGQXJDdEI7QUFzQ0lXLGtCQUFnQixFQUFFLG9CQXRDdEI7QUF1Q0lDLFlBQVUsRUFBRSx1U0F2Q2hCOztBQXdDSTtBQUNBQyxhQUFXLEVBQUUsZ0JBekNqQjtBQTBDSXJCLFlBQVUsRUFBRSxzQkExQ2hCO0FBMkNJQyxRQUFNLEVBQUUsa1RBM0NaO0FBNENJQyxZQUFVLEVBQUUsZ0NBNUNoQjtBQTZDSUMsUUFBTSxFQUFFLHNhQTdDWjtBQThDSW1CLGlCQUFlLEVBQUUsZ0NBOUNyQjtBQStDSUMscUJBQW1CLEVBQUcsa0JBL0MxQjtBQWdESUMsMEJBQXdCLEVBQUcsMENBaEQvQjs7QUFpREk7QUFDQXBCLHdCQUFzQixFQUFFLGdFQWxENUI7QUFtRElDLHdCQUFzQixFQUFFLHNGQW5ENUI7QUFvRElvQixlQUFhLEVBQUUsME5BcERuQjs7QUFxREk7QUFDQUMsY0FBWSxFQUFFLG1FQXREbEI7QUF1RElDLGlCQUFlLEVBQUUsbUZBdkRyQjtBQXdESUMsY0FBWSxFQUFFLHVLQXhEbEI7O0FBeURJO0FBQ0FDLDZCQUEyQixFQUFFLFFBMURqQztBQTJESUMsdUJBQXFCLEVBQUUsZ0JBM0QzQjtBQTRESUMsaUNBQStCLEVBQUUsMENBNURyQztBQTZESXpCLGtCQUFnQixFQUFFLDRCQTdEdEI7QUE4RElDLGdCQUFjLEVBQUUsNnZCQTlEcEI7QUErREl5Qix1QkFBcUIsRUFBRSx1a0JBL0QzQjs7QUFnRUk7QUFDQWxDLGlCQUFlLEVBQUcsYUFqRXRCO0FBa0VJbUMsZ0JBQWMsRUFBRSxXQWxFcEI7QUFtRUk3Qyx5QkFBdUIsRUFBRSxFQW5FN0I7QUFvRUk4QywrQkFBNkIsRUFBRSxDQXBFbkM7QUFxRUlyQyw4QkFBNEIsRUFBRztBQXJFbkMsQ0FEQSxDOzs7Ozs7Ozs7OztBQ0FBO0FBRUFsUCxNQUFNLENBQUNDLE9BQVAsR0FDQTtBQUNJQyxRQUFNLEVBQUcsMkJBRGI7QUFFSXNSLG1CQUFpQixFQUFHLGlCQUZ4QjtBQUdJckUsTUFBSSxFQUFHLElBSFg7QUFJSXVCLGNBQVksRUFBRyxjQUpuQjtBQUtJQyxlQUFhLEVBQUcsWUFMcEI7QUFNSUMsaUJBQWUsRUFBRyxjQU50QjtBQU9JQyxlQUFhLEVBQUcsa0JBUHBCO0FBUUlDLGdCQUFjLEVBQUcsZ0JBUnJCO0FBU0lDLGFBQVcsRUFBRSxhQVRqQjtBQVVJQyw4QkFBNEIsRUFBRSxvQkFWbEM7QUFXSUMscUJBQW1CLEVBQUUsMkJBWHpCO0FBWUlDLDhCQUE0QixFQUFHLEVBWm5DO0FBYUlDLGlCQUFlLEVBQUc7QUFidEIsQ0FEQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNGQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBLElBQU1oQyxJQUFJLEdBQUN6TSxrRUFBYyxDQUFDLENBQUQsQ0FBekI7QUFDQTs7QUFDQSxJQUFNK1EsY0FBYyxHQUFHM1IsK0RBQVEsSUFBYyxHQUFDVyx5REFBZixHQUFxQixVQUFyQixHQUFnQzBNLElBQWhDLEdBQXFDLEtBQXRDLENBQTlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBR0E7O2VBQ3VJck4sa0VBQVEsSUFBYSxHQUFDcU4sSUFBZCxHQUFtQixTQUFwQixDO0lBQXRJOUQsZ0IsWUFBQUEsZ0I7SUFBa0JDLG1CLFlBQUFBLG1CO0lBQXFCQyxvQixZQUFBQSxvQjtJQUFzQkMsb0IsWUFBQUEsb0I7SUFBc0JDLGtCLFlBQUFBLGtCO0lBQW9CRyxtQixZQUFBQSxtQjs7Z0JBQ3ZGOUosbUVBQVEsSUFBYSxHQUFDcU4sSUFBZCxHQUFtQixVQUFwQixDO0lBQXZCaEMsVyxhQUFBQSxXLEVBRVI7OztBQUNBLElBQU11RyxTQUFTLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixnQkFBeEIsQ0FBbEI7QUFDQSxJQUFNQyxXQUFXLEdBQUdGLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixVQUF4QixDQUFwQjtBQUNBLElBQU1FLGlCQUFpQixHQUFHSCxRQUFRLENBQUNDLGNBQVQsQ0FBd0IsbUJBQXhCLENBQTFCO0FBQ0EsSUFBTUcsbUJBQW1CLEdBQUdKLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixxQkFBeEIsQ0FBNUI7QUFDQSxJQUFNSSxNQUFNLEdBQUdMLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixPQUF4QixDQUFmLEMsQ0FFQTs7QUFDQSxJQUFJSyxXQUFXLEdBQUMsQ0FBaEI7O0FBQ0EsSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQWMsR0FDcEI7QUFDSUQsYUFBVyxHQUFDNUUsSUFBSSxDQUFDOEUsR0FBTCxFQUFaO0FBQ0FULFdBQVMsQ0FBQ1UsS0FBVixDQUFnQkMsT0FBaEIsR0FBd0IsT0FBeEI7QUFDSCxDQUpEOztBQU1BLElBQUlDLFdBQUosRUFBaUJDLElBQWpCOztBQUNBLElBQU1DLFVBQVU7QUFBQSxxRUFBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFJWDtBQUNBTix1QkFBVztBQUxBO0FBQUEsbUJBTU9PLG9FQUFZLENBQUMsQ0FBQyxNQUFELENBQUQsQ0FObkI7O0FBQUE7QUFNWEgsdUJBTlc7O0FBTThCO0FBQ3pDO0FBQ0EsZ0JBQUdBLFdBQUgsRUFDQTtBQUNJQyxrQkFBSSxHQUFDRyx5RUFBUyxDQUFDLE1BQUQsRUFBUyxJQUFULENBQWQ7QUFDQUMsNEZBQWlCLENBQUNKLElBQUksQ0FBQ0ssTUFBTixFQUFjbkIsY0FBZCxDQUFqQixDQUZKLENBRW1EOztBQUMvQ29CLG9DQUFzQixDQUFDTixJQUFELENBQXRCO0FBQ0gsYUFMRCxNQU9JTyxtRUFBVTs7QUFmSDtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQW1CWEMsbUJBQU8sQ0FBQ0MsS0FBUjs7QUFuQlc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBVlIsVUFBVTtBQUFBO0FBQUE7QUFBQSxHQUFoQjs7QUFzQkFBLFVBQVU7QUFDVlMscUVBQVEsRyxDQUVSOztBQUNBLElBQUlDLE1BQU0sR0FBRyxFQUFiO0FBQ0FsQixNQUFNLENBQUNtQixnQkFBUCxDQUF3QixRQUF4QixFQUFrQyxVQUFTQyxDQUFULEVBQ2xDO0FBQ0ksTUFDQTtBQUNJQSxLQUFDLENBQUNDLGNBQUY7QUFDQTNCLGFBQVMsQ0FBQ1UsS0FBVixDQUFnQkMsT0FBaEIsR0FBd0IsTUFBeEIsQ0FGSixDQUVtQzs7QUFDL0JSLGVBQVcsQ0FBQ3lCLFNBQVosR0FBc0IsRUFBdEIsQ0FISixDQUc2Qjs7QUFDekIsUUFBTUMsYUFBYSxHQUFDQywwRUFBa0IsQ0FBQ3hCLE1BQUQsQ0FBdEM7QUFDQWtCLFVBQU0sQ0FBQ08sUUFBUCxHQUFnQjNHLElBQUksQ0FBQzRHLEtBQUwsQ0FBVyxDQUFDckcsSUFBSSxDQUFDOEUsR0FBTCxLQUFXRixXQUFaLElBQXlCLElBQXBDLENBQWhCO0FBQ0FpQixVQUFNLENBQUNTLFdBQVAsR0FBbUIsQ0FBbkI7QUFDQVQsVUFBTSxDQUFDVSxnQkFBUCxHQUF3QixDQUF4QjtBQUNBVixVQUFNLENBQUNXLE9BQVAsR0FBZWxDLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixTQUF4QixFQUFtQ3hKLEtBQWxELENBUkosQ0FTSTtBQUNBOztBQUNBLFFBQUkwTCxRQUFKO0FBQUEsUUFBY0MsVUFBVSxHQUFDLEVBQXpCO0FBQUEsUUFBNkJDLFlBQVksR0FBQyxLQUExQzs7QUFDQSxTQUFJLElBQUlDLElBQVIsSUFBZ0JWLGFBQWhCLEVBQ0E7QUFDSSxVQUFHVSxJQUFJLENBQUNDLFVBQUwsQ0FBZ0IscUJBQWhCLENBQUgsRUFBMEM7QUFDMUM7QUFDSUosa0JBQVEsR0FBR0csSUFBSSxDQUFDNUgsU0FBTCxDQUFlNEgsSUFBSSxDQUFDRSxXQUFMLENBQWlCLEdBQWpCLElBQXdCLENBQXZDLENBQVg7O0FBQ0EsY0FBR1osYUFBYSxDQUFDLDBCQUF3Qk8sUUFBekIsQ0FBYixJQUFtREMsVUFBdEQsRUFBa0U7QUFDbEU7QUFDSUEsd0JBQVUsR0FBQ1IsYUFBYSxDQUFDLDBCQUF3Qk8sUUFBekIsQ0FBeEI7QUFDQVosb0JBQU0sQ0FBQ1MsV0FBUDtBQUNBLGtCQUFHSyxZQUFILEVBQWlCO0FBQ2JkLHNCQUFNLENBQUNVLGdCQUFQO0FBQ0pJLDBCQUFZLEdBQUMsSUFBYixDQUxKLENBS3NCO0FBQ3JCOztBQUNELGNBQUdULGFBQWEsQ0FBQ1UsSUFBRCxDQUFiLElBQXVCLE1BQTFCLEVBQ0E7QUFDSXRDLG9CQUFRLENBQUNDLGNBQVQsQ0FBd0IsY0FBWWtDLFFBQXBDLEVBQThDTSxVQUE5QyxDQUF5REMsU0FBekQsQ0FBbUVDLEdBQW5FLENBQXVFLFdBQXZFO0FBQ0EsZ0JBQUdmLGFBQWEsQ0FBQyxjQUFZTyxRQUFiLENBQWIsS0FBd0MvSCxTQUEzQyxFQUFxRDtBQUNqRGlJLDBCQUFZLEdBQUMsS0FBYjtBQUNQLFdBTEQsTUFPQTtBQUNJLGdCQUFHVCxhQUFhLENBQUMsY0FBWU8sUUFBYixDQUFiLEtBQXdDLElBQTNDLEVBQ0E7QUFDSUUsMEJBQVksR0FBQyxLQUFiLENBREosQ0FDd0I7O0FBQ3BCckMsc0JBQVEsQ0FBQ0MsY0FBVCxDQUF3QixjQUFZa0MsUUFBcEMsRUFBOENNLFVBQTlDLENBQXlEQyxTQUF6RCxDQUFtRUMsR0FBbkUsQ0FBdUUsY0FBdkU7QUFDSDtBQUNKO0FBQ0o7QUFDSixLQXhDTCxDQXlDSTs7O0FBQ0EsUUFBR04sWUFBSCxFQUNJZCxNQUFNLENBQUNVLGdCQUFQLEdBM0NSLENBNkNJOztBQUNBLFFBQUlXLFFBQVEsR0FBQ0MsMEVBQWdCLENBQUN0QixNQUFELENBQTdCOztBQUNBLFFBQUdaLFdBQUgsRUFDQTtBQUNJO0FBQ0EsVUFBTW1DLGFBQWEsR0FBRyxJQUFJQyxjQUFKLEVBQXRCO0FBQ0FELG1CQUFhLENBQUNFLElBQWQsQ0FBbUIsTUFBbkIsRUFBMkJ6VSwwREFBTSxHQUFDbUUscUVBQVAsR0FBbUJTLDBFQUE5Qzs7QUFDQTJQLG1CQUFhLENBQUNHLGtCQUFkLEdBQW1DLFlBQ25DO0FBQ0ksWUFBSSxLQUFLQyxVQUFMLElBQW1CSCxjQUFjLENBQUNJLElBQXRDLEVBQ0E7QUFDSSxjQUFJQyxXQUFXLEdBQUNDLElBQUksQ0FBQ0MsS0FBTCxDQUFXLEtBQUtDLFlBQWhCLENBQWhCOztBQUNBLGNBQUksS0FBS3RDLE1BQUwsS0FBZ0IsR0FBaEIsSUFBd0JtQyxXQUFXLENBQUNJLE9BQXhDLEVBQ0E7QUFDSVosb0JBQVEsSUFBRSxTQUFPUSxXQUFXLENBQUNJLE9BQVosQ0FBb0J2SSxPQUFwQixDQUE0QixNQUE1QixFQUFvQzZFLGNBQWMsQ0FBQy9DLFlBQW5ELENBQWpCO0FBQ0FtRSxrQ0FBc0IsQ0FBQ04sSUFBRCxDQUF0QjtBQUNILFdBSkQsTUFNSWdDLFFBQVEsSUFBRSxTQUFPOUssa0JBQWtCLENBQUNtRCxPQUFuQixDQUEyQixNQUEzQixFQUFtQzZFLGNBQWMsQ0FBQy9DLFlBQWxELENBQWpCLENBUlIsQ0FTSTs7O0FBQ0EwRyxnQkFBTSxDQUFDQyxRQUFQLENBQWdCQyxJQUFoQixHQUFxQixFQUFyQjtBQUNBLGNBQU1DLElBQUksR0FBQ0gsTUFBTSxDQUFDQyxRQUFsQixDQVhKLENBVytCOztBQUMzQkQsZ0JBQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsSUFBaEIsR0FBcUIsY0FBckI7QUFDSDtBQUNKLE9BakJEOztBQWtCQWIsbUJBQWEsQ0FBQ2UsZ0JBQWQsQ0FBK0IsZUFBL0IsRUFBZ0QsWUFBVWpELElBQUksQ0FBQ2tELEtBQS9EO0FBQ0FoQixtQkFBYSxDQUFDZSxnQkFBZCxDQUErQixjQUEvQixFQUErQyxrQkFBL0M7QUFDQXRDLFlBQU0sQ0FBQ3dDLGNBQVAsR0FBc0JDLHlFQUFpQixFQUF2QyxDQXhCSixDQXdCOEM7O0FBQzFDbEIsbUJBQWEsQ0FBQ21CLElBQWQsQ0FBbUJaLElBQUksQ0FBQ2EsU0FBTCxDQUFlM0MsTUFBZixDQUFuQjtBQUNILEtBM0JELE1BNkJBO0FBQUk7QUFDQSxVQUFHNEMsb0VBQVUsQ0FBQzVDLE1BQUQsQ0FBYixFQUNBO0FBQ0txQixnQkFBUSxJQUFFLFlBQVUzSyxtQkFBVixHQUE4QixNQUF4QztBQUNBbU0sd0VBQVUsQ0FBQ2xFLFdBQUQsRUFBYyxHQUFkLEVBQW1CMEMsUUFBbkIsRUFBNkIsRUFBN0IsRUFBaUMsQ0FBQyxTQUFELENBQWpDLENBQVY7QUFDQTVDLGdCQUFRLENBQUNxRSxhQUFULENBQXVCLGdCQUF2QixFQUF5QzVELEtBQXpDLENBQStDQyxPQUEvQyxHQUF1RCxPQUF2RDtBQUNKLE9BTEQsTUFNSztBQUNEMEQsd0VBQVUsQ0FBQ2xFLFdBQUQsRUFBYyxHQUFkLEVBQW1CMEMsUUFBbkIsRUFBNkIsRUFBN0IsRUFBaUMsQ0FBQyxTQUFELENBQWpDLENBQVYsQ0FSUixDQVNJOzs7QUFDQWEsWUFBTSxDQUFDQyxRQUFQLENBQWdCQyxJQUFoQixHQUFxQixFQUFyQjtBQUNBLFVBQU1DLElBQUksR0FBQ0gsTUFBTSxDQUFDQyxRQUFsQixDQVhKLENBVytCOztBQUMzQkQsWUFBTSxDQUFDQyxRQUFQLENBQWdCQyxJQUFoQixHQUFxQixVQUFyQjtBQUNILEtBekZMLENBMEZJOzs7QUFDQSxRQUFNVyxZQUFZLEdBQUN0RSxRQUFRLENBQUN1RSxnQkFBVCxDQUEwQixPQUExQixDQUFuQjs7QUFDQSxTQUFJLElBQUlqSSxDQUFSLElBQWFnSSxZQUFiO0FBQ0ksVUFBR0EsWUFBWSxDQUFDaEksQ0FBRCxDQUFaLENBQWdCbUUsS0FBaEIsS0FBMEJyRyxTQUE3QixFQUF3QztBQUNwQ2tLLG9CQUFZLENBQUNoSSxDQUFELENBQVosQ0FBZ0JtRSxLQUFoQixDQUFzQkMsT0FBdEIsR0FBOEIsT0FBOUI7QUFGUjtBQUdILEdBaEdELENBaUdBLE9BQU1lLENBQU4sRUFDQTtBQUNJMkMsb0VBQVUsQ0FBQ2xFLFdBQUQsRUFBYyxHQUFkLEVBQW1CMUcsV0FBbkIsRUFBZ0MsRUFBaEMsRUFBb0MsQ0FBQyxPQUFELENBQXBDLENBQVY7QUFDQTRILFdBQU8sQ0FBQ0MsS0FBUixDQUFjSSxDQUFkO0FBQ0g7QUFDSixDQXhHRCxFLENBMEdBO0FBQ0E7O0FBQ0EsSUFBTVAsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUF5QixDQUFDTixJQUFELEVBQy9CO0FBQ0ksTUFBTTRELGNBQWMsR0FBRyxJQUFJekIsY0FBSixFQUF2QjtBQUNBeUIsZ0JBQWMsQ0FBQ3hCLElBQWYsQ0FBb0IsS0FBcEIsRUFBMkJ6VSwwREFBTSxHQUFDbUUscUVBQVAsR0FBbUJPLDRFQUFuQixHQUFzQzJOLElBQUksQ0FBQ2pFLEVBQTNDLEdBQThDLEdBQTlDLEdBQWtEcUQsUUFBUSxDQUFDQyxjQUFULENBQXdCLFNBQXhCLEVBQW1DeEosS0FBaEg7O0FBQ0ErTixnQkFBYyxDQUFDdkIsa0JBQWYsR0FBb0MsWUFDcEM7QUFDSSxRQUFJLEtBQUtDLFVBQUwsSUFBbUJILGNBQWMsQ0FBQ0ksSUFBdEMsRUFDQTtBQUNJLFVBQUlzQixRQUFRLEdBQUNwQixJQUFJLENBQUNDLEtBQUwsQ0FBVyxLQUFLQyxZQUFoQixDQUFiOztBQUNBLFVBQUksS0FBS3RDLE1BQUwsS0FBZ0IsR0FBcEIsRUFDQTtBQUNJLFlBQU15RCxXQUFXLEdBQUNELFFBQVEsQ0FBQ2hLLE1BQTNCO0FBQ0EsWUFBSWtLLHNCQUFzQixHQUFDLEVBQTNCO0FBQ0FQLHdFQUFVLENBQUNqRSxpQkFBRCxFQUFvQixNQUFwQixFQUE0QnRJLG9CQUFvQixDQUFDb0QsT0FBckIsQ0FBNkIsTUFBN0IsRUFBcUMyRixJQUFJLENBQUN4SyxJQUExQyxDQUE1QixDQUFWOztBQUNBLFlBQUdzTyxXQUFXLEtBQUcsQ0FBakIsRUFDQTtBQUNJLGNBQUlFLGNBQWMsR0FBQyxDQUFuQjtBQUFBLGNBQXNCQyxtQkFBbUIsR0FBQyxDQUExQztBQUFBLGNBQTZDQyxXQUFXLEdBQUMsQ0FBekQ7QUFBQSxjQUE0REMsY0FBNUQ7O0FBQ0EsZUFBSSxJQUFJekksQ0FBUixJQUFhbUksUUFBYixFQUNBO0FBQ0lHLDBCQUFjLElBQUVILFFBQVEsQ0FBQ25JLENBQUQsQ0FBUixDQUFZMEYsV0FBNUIsQ0FESixDQUM0Qzs7QUFDeEM2QywrQkFBbUIsSUFBRUosUUFBUSxDQUFDbkksQ0FBRCxDQUFSLENBQVkyRixnQkFBakM7QUFDQTZDLHVCQUFXLElBQUVMLFFBQVEsQ0FBQ25JLENBQUQsQ0FBUixDQUFZd0YsUUFBekI7QUFDQWlELDBCQUFjLEdBQ2Q7QUFDSUMsd0JBQVUsRUFBR0MsOERBQVUsQ0FBQ1IsUUFBUSxDQUFDbkksQ0FBRCxDQUFSLENBQVk0SSxTQUFiLEVBQXdCMUosSUFBeEIsQ0FEM0I7QUFFSTJKLDhCQUFnQixFQUFHVixRQUFRLENBQUNuSSxDQUFELENBQVIsQ0FBWTJGLGdCQUZuQztBQUdJbUQseUJBQVcsRUFBR1gsUUFBUSxDQUFDbkksQ0FBRCxDQUFSLENBQVkwRixXQUg5QjtBQUlJcUQseUJBQVcsRUFBR1osUUFBUSxDQUFDbkksQ0FBRCxDQUFSLENBQVl3RjtBQUo5QixhQURBO0FBT0E2QyxrQ0FBc0IsSUFBRSxTQUFPVyw4REFBVSxDQUFDM04sbUJBQUQsRUFBc0JvTixjQUF0QixDQUFqQixHQUF1RCxPQUEvRTtBQUNIOztBQUNEQSx3QkFBYyxHQUNkO0FBQ0lNLHVCQUFXLEVBQUdsSyxJQUFJLENBQUM0RyxLQUFMLENBQVcrQyxXQUFXLEdBQUNKLFdBQXZCLENBRGxCO0FBRUlhLDZCQUFpQixFQUFHcEssSUFBSSxDQUFDNEcsS0FBTCxDQUFXOEMsbUJBQW1CLEdBQUNELGNBQXBCLEdBQW1DLEdBQTlDO0FBRnhCLFdBREE7QUFLQUQsZ0NBQXNCLEdBQUMsU0FBT1csOERBQVUsQ0FBQzFOLG9CQUFELEVBQXVCbU4sY0FBdkIsQ0FBakIsR0FBd0QsT0FBeEQsR0FBZ0VKLHNCQUF2RjtBQUNBUCwwRUFBVSxDQUFDaEUsbUJBQUQsRUFBc0IsSUFBdEIsRUFBNEJ1RSxzQkFBNUIsQ0FBVjtBQUNILFNBeEJELE1BMEJJUCxnRUFBVSxDQUFDaEUsbUJBQUQsRUFBc0IsSUFBdEIsRUFBNEIxSSxnQkFBNUIsQ0FBVixDQTlCUixDQStCSTs7O0FBQ0EwTSx3RUFBVSxDQUFDaEUsbUJBQUQsRUFBc0IsR0FBdEIsRUFBMkIsZ0JBQWNOLGNBQWMsQ0FBQy9DLFlBQTdCLEdBQTBDLGdDQUExQyxHQUEyRStDLGNBQWMsQ0FBQ25CLGVBQTFGLEdBQTBHLE1BQXJJLEVBQTZJLEVBQTdJLEVBQWlKLENBQUMsS0FBRCxDQUFqSixFQUEwSixFQUExSixFQUE4SixLQUE5SixDQUFWO0FBQ0g7QUFDSjtBQUNKLEdBekNEOztBQTBDQTZGLGdCQUFjLENBQUNYLGdCQUFmLENBQWdDLGVBQWhDLEVBQWlELFlBQVVqRCxJQUFJLENBQUNrRCxLQUFoRTtBQUNBVSxnQkFBYyxDQUFDUCxJQUFmO0FBQ0gsQ0FoREQsQzs7Ozs7Ozs7Ozs7O0FDakxBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQU11QixjQUFjLEdBQUdyWCxtQkFBTyxDQUFDLGtEQUFELENBQTlCOztBQUVBO0FBQ0E7O0FBRUEsSUFBTXNYLEdBQUcsR0FBR3RYLGtFQUFRLElBQWdCLEdBQUNxWCxjQUFjLENBQUNoSyxJQUFoQyxHQUFxQyxTQUF0QyxDQUFuQixDLENBRUE7OztBQUNPLElBQU0ySSxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDNUMsTUFBRCxFQUMxQjtBQUNJLE1BQUcsQ0FBQ2hILDJEQUFPLENBQUNnSCxNQUFNLENBQUNPLFFBQVIsQ0FBUixJQUE2QixDQUFDdkgsMkRBQU8sQ0FBQ2dILE1BQU0sQ0FBQ1UsZ0JBQVIsQ0FBckMsSUFBa0UsQ0FBQzFILDJEQUFPLENBQUNnSCxNQUFNLENBQUNTLFdBQVIsQ0FBMUUsS0FBbUcsQ0FBQ3pILDJEQUFPLENBQUNnSCxNQUFNLENBQUNtRSxlQUFSLENBQVIsSUFBb0MsQ0FBQ25MLDJEQUFPLENBQUNnSCxNQUFNLENBQUNXLE9BQVIsQ0FBL0ksQ0FBSCxFQUNBO0FBQ0l5RCx3RUFBVSxDQUFDLFlBQUQsRUFBZXBFLE1BQWYsQ0FBVjtBQUNBLFdBQU8sSUFBUDtBQUNILEdBSkQsTUFNSSxPQUFPLEtBQVA7QUFDUCxDQVRNLEMsQ0FXUDs7QUFDTyxJQUFNc0IsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDdEIsTUFBRCxFQUNoQztBQUNJLE1BQUcsQ0FBQ2hILDJEQUFPLENBQUNnSCxNQUFNLENBQUNPLFFBQVIsQ0FBUixJQUE2QixDQUFDdkgsMkRBQU8sQ0FBQ2dILE1BQU0sQ0FBQ1UsZ0JBQVIsQ0FBckMsSUFBa0UsQ0FBQzFILDJEQUFPLENBQUNnSCxNQUFNLENBQUNTLFdBQVIsQ0FBN0UsRUFDQTtBQUNJLFFBQU00RCxLQUFLLEdBQUNyRSxNQUFNLENBQUNVLGdCQUFQLEdBQXdCVixNQUFNLENBQUNTLFdBQTNDO0FBQ0EsUUFBTXJILE1BQU0sR0FDWjtBQUNJa0wsY0FBUSxFQUFFdEUsTUFBTSxDQUFDTyxRQURyQjtBQUVJcUQsc0JBQWdCLEVBQUU1RCxNQUFNLENBQUNVLGdCQUY3QjtBQUdJbUQsaUJBQVcsRUFBRTdELE1BQU0sQ0FBQ1M7QUFIeEIsS0FEQTtBQU1BLFFBQUk4RCxNQUFNLEdBQUMsRUFBWDtBQUNBLFFBQUdGLEtBQUssR0FBRyxHQUFYLEVBQ0lFLE1BQU0sR0FBQ1IsOERBQVUsQ0FBQ0csR0FBRyxDQUFDNU8sdUJBQUwsRUFBOEI4RCxNQUE5QixDQUFqQixDQURKLEtBRUssSUFBR2lMLEtBQUssR0FBRyxHQUFYLEVBQ0RFLE1BQU0sR0FBQ1IsOERBQVUsQ0FBQ0csR0FBRyxDQUFDM08seUJBQUwsRUFBZ0M2RCxNQUFoQyxDQUFqQixDQURDLEtBR0RtTCxNQUFNLEdBQUNSLDhEQUFVLENBQUNHLEdBQUcsQ0FBQzFPLDBCQUFMLEVBQWlDNEQsTUFBakMsQ0FBakI7QUFDSixRQUFHbUwsTUFBSCxFQUNJLE9BQU9BLE1BQVAsQ0FESixLQUdJLE9BQU8sRUFBUDtBQUNQLEdBcEJELE1Bc0JJLE9BQU8sRUFBUDtBQUNQLENBekJNLEM7Ozs7Ozs7Ozs7OztBQ3BCUDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFTyxJQUFNSCxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDdlAsSUFBRCxFQUFPMlAsSUFBUCxFQUMxQjtBQUNJQyxjQUFZLENBQUNDLE9BQWIsQ0FBcUI3UCxJQUFyQixFQUEyQmlOLElBQUksQ0FBQ2EsU0FBTCxDQUFlNkIsSUFBZixDQUEzQjtBQUNILENBSE07QUFLQSxJQUFNaEYsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQzNLLElBQUQsRUFDekI7QUFBQSxNQURnQzhQLElBQ2hDLHVFQURxQyxLQUNyQztBQUNJLE1BQUdBLElBQUgsRUFDSSxPQUFPN0MsSUFBSSxDQUFDQyxLQUFMLENBQVcwQyxZQUFZLENBQUNHLE9BQWIsQ0FBcUIvUCxJQUFyQixDQUFYLENBQVAsQ0FESixLQUdJLE9BQU80UCxZQUFZLENBQUNHLE9BQWIsQ0FBcUIvUCxJQUFyQixDQUFQO0FBQ1AsQ0FOTTtBQVFBLElBQU1nUSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDaFEsSUFBRCxFQUM1QjtBQUNJNFAsY0FBWSxDQUFDSyxVQUFiLENBQXdCalEsSUFBeEI7QUFDSCxDQUhNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQ2RQOztBQUNPLElBQU1nTyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDa0MsU0FBRCxFQUFZQyxPQUFaLEVBQzFCO0FBQUEsTUFEK0NDLFVBQy9DLHVFQUQwRCxFQUMxRDtBQUFBLE1BRDhEQyxLQUM5RCx1RUFEb0UsRUFDcEU7QUFBQSxNQUR3RUMsUUFDeEUsdUVBRGlGLEVBQ2pGO0FBQUEsTUFEcUZDLGFBQ3JGLHVFQURtRyxFQUNuRztBQUFBLE1BRHVHMUwsT0FDdkcsdUVBRCtHLElBQy9HO0FBQ0ksTUFBR1YsMkRBQU8sQ0FBQ2dNLE9BQUQsQ0FBUCxJQUFvQmhNLDJEQUFPLENBQUMrTCxTQUFELENBQTlCLEVBQ0ksT0FBTyxLQUFQLENBREosS0FHQTtBQUNJLFFBQU1NLFVBQVUsR0FBQzVHLFFBQVEsQ0FBQzZHLGFBQVQsQ0FBdUJOLE9BQXZCLENBQWpCO0FBRUEsUUFBRyxDQUFDaE0sMkRBQU8sQ0FBQ2tNLEtBQUQsQ0FBWCxFQUFtQjtBQUNmRyxnQkFBVSxDQUFDakssRUFBWCxHQUFjOEosS0FBZDs7QUFFSixRQUFHSyxLQUFLLENBQUNDLE9BQU4sQ0FBY0wsUUFBZCxLQUEyQkEsUUFBUSxDQUFDak0sTUFBVCxJQUFpQixDQUEvQyxFQUNBO0FBQ0ksV0FBSSxJQUFJNkIsQ0FBUixJQUFhb0ssUUFBYjtBQUNJRSxrQkFBVSxDQUFDbEUsU0FBWCxDQUFxQkMsR0FBckIsQ0FBeUIrRCxRQUFRLENBQUNwSyxDQUFELENBQWpDO0FBREo7QUFFSDs7QUFFRCxRQUFHLFFBQU9xSyxhQUFQLE1BQXlCLFFBQTVCLEVBQXNDO0FBQ3RDO0FBQ0ksYUFBSSxJQUFJSyxZQUFSLElBQXdCTCxhQUF4QjtBQUNJQyxvQkFBVSxDQUFDSyxZQUFYLENBQXdCRCxZQUF4QixFQUFzQ0wsYUFBYSxDQUFDSyxZQUFELENBQW5EO0FBREo7QUFFSDs7QUFFRCxRQUFHLENBQUN6TSwyREFBTyxDQUFDaU0sVUFBRCxDQUFYLEVBQ0lJLFVBQVUsQ0FBQ2pGLFNBQVgsR0FBcUI2RSxVQUFVLENBQUN2TCxPQUFYLENBQW1CLEtBQW5CLEVBQXlCLE1BQXpCLENBQXJCLENBbkJSLENBbUI4RDs7QUFFMUQsUUFBR0EsT0FBSCxFQUNJcUwsU0FBUyxDQUFDM0UsU0FBVixHQUFvQixFQUFwQjtBQUNKMkUsYUFBUyxDQUFDWSxXQUFWLENBQXNCTixVQUF0QjtBQUNIO0FBQ0osQ0E5Qk0sQzs7Ozs7Ozs7Ozs7O0FDSFA7QUFBQTtBQUFBO0FBQUE7QUFFTyxJQUFNdEYsUUFBUSxHQUFHLFNBQVhBLFFBQVcsR0FDeEI7QUFDSUYsU0FBTyxDQUFDK0YsR0FBUixDQUFZLHlPQUFaO0FBQ0EsU0FBTyxJQUFQO0FBQ0gsQ0FKTTtBQU1BLElBQU1uRyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUNDLE1BQUQsRUFBU25CLGNBQVQsRUFDakM7QUFDSSxNQUFNc0gsSUFBSSxHQUFDcEgsUUFBUSxDQUFDQyxjQUFULENBQXdCLGlCQUF4QixDQUFYO0FBQ0EsTUFBTW9ILFFBQVEsR0FBQ3BHLE1BQU0sR0FBQyxVQUF0QjtBQUNBbUcsTUFBSSxDQUFDMUssSUFBTCxHQUFVLE1BQUlvRCxjQUFjLENBQUN1SCxRQUFELENBQTVCO0FBQ0gsQ0FMTSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NDTlA7O0FBQ08sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUF3QixDQUFDQyxVQUFELEVBQWFsSCxNQUFiLEVBQ3JDO0FBQ0ksT0FBSSxJQUFJL0QsQ0FBUixJQUFhK0QsTUFBTSxDQUFDbUgsUUFBcEIsRUFDQTtBQUNJLFFBQUcsQ0FBQ2pOLDJEQUFPLENBQUM4RixNQUFNLENBQUNtSCxRQUFQLENBQWdCbEwsQ0FBaEIsRUFBbUJLLEVBQXBCLENBQVgsRUFDQTtBQUNJLFVBQUk4SyxPQUFPLEdBQUNwSCxNQUFNLENBQUNtSCxRQUFQLENBQWdCbEwsQ0FBaEIsRUFBbUJLLEVBQS9COztBQUNBLFVBQUc0SyxVQUFVLENBQUNFLE9BQUQsQ0FBVixLQUFzQnJOLFNBQXpCLEVBQ0E7QUFDSSxZQUFJc04sU0FBUyxHQUFDMUgsUUFBUSxDQUFDQyxjQUFULENBQXdCd0gsT0FBeEIsQ0FBZDs7QUFDQSxhQUFLLElBQUlFLFNBQVQsSUFBc0JKLFVBQVUsQ0FBQ0UsT0FBRCxDQUFoQztBQUNJQyxtQkFBUyxDQUFDVCxZQUFWLENBQXVCVSxTQUF2QixFQUFrQ0osVUFBVSxDQUFDRSxPQUFELENBQVYsQ0FBb0JFLFNBQXBCLENBQWxDO0FBREo7QUFFSDtBQUNKO0FBQ0o7O0FBQ0QsU0FBTyxJQUFQO0FBQ0gsQ0FoQk0sQyxDQWtCUDs7QUFDTyxJQUFNOUYsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFxQixDQUFDeEIsTUFBRCxFQUNsQztBQUNJLE1BQU11SCxLQUFLLEdBQUMsRUFBWjtBQUNBLE1BQU1DLFFBQVEsR0FBRyxJQUFJQyxRQUFKLENBQWF6SCxNQUFiLENBQWpCOztBQUZKLDZDQUdzQndILFFBQVEsQ0FBQ0UsT0FBVCxFQUh0QjtBQUFBOztBQUFBO0FBR0k7QUFBQSxVQUFRQyxNQUFSO0FBQ0dKLFdBQUssQ0FBQ0ksTUFBTSxDQUFDLENBQUQsQ0FBUCxDQUFMLEdBQWlCQSxNQUFNLENBQUMsQ0FBRCxDQUF2QjtBQURIO0FBSEo7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFLSSxTQUFPSixLQUFQO0FBQ0gsQ0FQTSxDLENBU1A7QUFDQTs7QUFDTyxJQUFNSyxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFDNUgsTUFBRCxFQUN4QjtBQUNJLE1BQU13SCxRQUFRLEdBQUcsSUFBSUMsUUFBSixDQUFhekgsTUFBYixDQUFqQjs7QUFESiw4Q0FFc0J3SCxRQUFRLENBQUNFLE9BQVQsRUFGdEI7QUFBQTs7QUFBQTtBQUVJLDJEQUNBO0FBQUEsVUFEUUMsTUFDUjtBQUNJLFVBQUczSCxNQUFNLENBQUNtSCxRQUFQLENBQWdCUSxNQUFNLENBQUMsQ0FBRCxDQUF0QixFQUEyQkUsSUFBM0IsSUFBaUMsVUFBakMsSUFBK0M3SCxNQUFNLENBQUNtSCxRQUFQLENBQWdCUSxNQUFNLENBQUMsQ0FBRCxDQUF0QixFQUEyQkUsSUFBM0IsSUFBaUMsT0FBbkYsRUFDSTdILE1BQU0sQ0FBQ21ILFFBQVAsQ0FBZ0JRLE1BQU0sQ0FBQyxDQUFELENBQXRCLEVBQTJCRyxPQUEzQixHQUFtQyxLQUFuQyxDQURKLEtBR0k5SCxNQUFNLENBQUNtSCxRQUFQLENBQWdCUSxNQUFNLENBQUMsQ0FBRCxDQUF0QixFQUEyQnZSLEtBQTNCLEdBQWlDLEVBQWpDO0FBQ1A7QUFSTDtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQVNJLFNBQU8sSUFBUDtBQUNILENBWE0sQyxDQVlQOztBQUNPLElBQU0yUixlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUMvSCxNQUFELEVBQy9CO0FBQ0k0SCxVQUFRLENBQUM1SCxNQUFELENBQVI7QUFDQUEsUUFBTSxDQUFDSSxLQUFQLENBQWFDLE9BQWIsR0FBcUIsTUFBckI7QUFDSCxDQUpNLEM7Ozs7Ozs7Ozs7OztBQzlDUDtBQUFBO0FBQUE7QUFBQTtDQUVBOztBQUNPLElBQU1TLFVBQVUsR0FBRyxTQUFiQSxVQUFhLEdBQzFCO0FBQ0k7QUFDQSxNQUFJa0gsSUFBSSxHQUFHNUUsTUFBTSxDQUFDNEUsSUFBUCxHQUFjNUUsTUFBTSxDQUFDNEUsSUFBUCxJQUFlLEVBQXhDLENBRkosQ0FHSTs7O0FBQ0FBLE1BQUksQ0FBQ0MsSUFBTCxDQUFVLENBQUMsWUFDWDtBQUNJLFFBQUlDLElBQUksR0FBRyxJQUFYOztBQUNBLGFBQVNDLCtCQUFULEdBQ0E7QUFDSSxVQUFJaEksR0FBRyxHQUFHLElBQUk5RSxJQUFKLEVBQVY7QUFBQSxVQUNBK00sS0FBSyxHQUFHdE4sSUFBSSxDQUFDNEcsS0FBTCxDQUFXdkIsR0FBRyxDQUFDa0ksT0FBSixLQUFnQixJQUEzQixDQURSO0FBQUEsVUFFQUMsV0FBVyxHQUFHSixJQUFJLENBQUNLLGNBQUwsRUFGZDtBQUdBLFVBQUlDLFFBQVEsR0FBR0MsUUFBUSxDQUFDSCxXQUFXLENBQUMsQ0FBRCxDQUFaLENBQXZCO0FBQ0EsVUFBSUksYUFBYSxHQUFHLFFBQXBCLENBTEosQ0FLa0M7O0FBQzlCLFVBQUlDLGVBQWUsR0FBR0gsUUFBUSxHQUFHRSxhQUFYLEdBQTJCTixLQUFqRDtBQUNBLGFBQU9PLGVBQVA7QUFDSDs7QUFDRCxTQUFLQyx1QkFBTCxDQUE4QlQsK0JBQStCLEVBQTdEO0FBQ0gsR0FkUyxDQUFWLEVBSkosQ0FtQkk7OztBQUNBSCxNQUFJLENBQUNDLElBQUwsQ0FBVSxDQUFDLGVBQUQsQ0FBVjs7QUFDQUQsTUFBSSxDQUFDQyxJQUFMLENBQVUsQ0FBQyxvQkFBRCxDQUFWOztBQUNBLEdBQUMsWUFBVztBQUNSLFFBQUlZLENBQUMsR0FBQ3JYLHdEQUFNLENBQUNDLEdBQWI7O0FBQ0F1VyxRQUFJLENBQUNDLElBQUwsQ0FBVSxDQUFDLGVBQUQsRUFBa0JZLENBQUMsR0FBQyxZQUFwQixDQUFWOztBQUNBYixRQUFJLENBQUNDLElBQUwsQ0FBVSxDQUFDLFdBQUQsRUFBY3pXLHdEQUFNLENBQUNFLE1BQXJCLENBQVY7O0FBQ0EsUUFBSW9YLENBQUMsR0FBQ25KLFFBQU47QUFBQSxRQUFnQm9KLENBQUMsR0FBQ0QsQ0FBQyxDQUFDdEMsYUFBRixDQUFnQixRQUFoQixDQUFsQjtBQUFBLFFBQTZDd0MsQ0FBQyxHQUFDRixDQUFDLENBQUNHLG9CQUFGLENBQXVCLFFBQXZCLEVBQWlDLENBQWpDLENBQS9DO0FBQ0FGLEtBQUMsQ0FBQ2xCLElBQUYsR0FBTyxpQkFBUDtBQUEwQmtCLEtBQUMsQ0FBQ0csS0FBRixHQUFRLElBQVI7QUFBY0gsS0FBQyxDQUFDSSxHQUFGLEdBQU1OLENBQUMsR0FBQyxXQUFSO0FBQXFCRyxLQUFDLENBQUM1RyxVQUFGLENBQWFnSCxZQUFiLENBQTBCTCxDQUExQixFQUE0QkMsQ0FBNUI7QUFDaEUsR0FORDtBQU9ILENBOUJNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNIUDtBQUNBLElBQU03TixJQUFJLEdBQUN6TSxrRUFBYyxDQUFDLENBQUQsQ0FBekI7O0FBRUEsSUFBTStRLGNBQWMsR0FBRzNSLCtEQUFRLElBQWlCLEdBQUNXLHlEQUFsQixHQUF3QixVQUF4QixHQUFtQzBNLElBQW5DLEdBQXdDLEtBQXpDLENBQTlCOztBQUVBO0FBRUE7QUFDQTtBQUVPLElBQU13SSxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLEdBQ2pDO0FBQ0k7QUFDQSxNQUFNMEYsU0FBUyxHQUFDLElBQUloTyxJQUFKLEdBQVdpTyxpQkFBWCxLQUErQixDQUFDLENBQWhEO0FBQ0EsTUFBR0QsU0FBUyxHQUFHL1Msa0VBQVosSUFBaUMrUyxTQUFTLEdBQUdoVCxrRUFBaEQsRUFDSSxPQUFPLENBQVAsQ0FESixLQUdJLE9BQU9nVCxTQUFQO0FBQ1AsQ0FSTSxDLENBVVA7QUFDQTs7QUFDTyxJQUFNRSxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDQyxNQUFELEVBQVMvRixLQUFULEVBQWdCZ0csVUFBaEIsRUFDMUI7QUFDSSxNQUFNQyxXQUFXLEdBQ2pCO0FBQ0lwTixNQUFFLEVBQUVrTixNQURSO0FBRUkvRixTQUFLLEVBQUVBLEtBRlg7QUFHSWhDLFlBQVEsRUFBRWdJO0FBSGQsR0FEQTtBQU1BbkUsc0VBQVUsQ0FBQyxNQUFELEVBQVNvRSxXQUFULENBQVY7QUFDSCxDQVRNLEMsQ0FXUDtBQUNBOztBQUNPLElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQ3BDLEtBQUQsRUFDaEM7QUFDSSxNQUFNcUMsVUFBVSxHQUFDbEosbUVBQVMsQ0FBQyxZQUFELENBQTFCOztBQUNBLE1BQUcsQ0FBQ3hHLDJEQUFPLENBQUMwUCxVQUFELENBQVgsRUFDQTtBQUNJLFFBQU0xSSxNQUFNLEdBQUM4QixJQUFJLENBQUNDLEtBQUwsQ0FBVzJHLFVBQVgsQ0FBYjs7QUFDQSxRQUFHLENBQUMxUCwyREFBTyxDQUFDZ0gsTUFBTSxDQUFDTyxRQUFSLENBQVIsSUFBNkIsQ0FBQ3ZILDJEQUFPLENBQUNnSCxNQUFNLENBQUNVLGdCQUFSLENBQXJDLElBQWtFLENBQUMxSCwyREFBTyxDQUFDZ0gsTUFBTSxDQUFDUyxXQUFSLENBQTFFLEtBQW1HLENBQUN6SCwyREFBTyxDQUFDZ0gsTUFBTSxDQUFDbUUsZUFBUixDQUFSLElBQW9DLENBQUNuTCwyREFBTyxDQUFDZ0gsTUFBTSxDQUFDVyxPQUFSLENBQS9JLENBQUgsRUFDQTtBQUNJMEYsV0FBSyxDQUFDOUYsUUFBTixHQUFlUCxNQUFNLENBQUNPLFFBQXRCO0FBQ0E4RixXQUFLLENBQUMzRixnQkFBTixHQUF1QlYsTUFBTSxDQUFDVSxnQkFBOUI7QUFDQTJGLFdBQUssQ0FBQzVGLFdBQU4sR0FBa0JULE1BQU0sQ0FBQ1MsV0FBekI7QUFDQSxVQUFHLENBQUN6SCwyREFBTyxDQUFDZ0gsTUFBTSxDQUFDbUUsZUFBUixDQUFYLEVBQ0lrQyxLQUFLLENBQUNsQyxlQUFOLEdBQXNCbkUsTUFBTSxDQUFDbUUsZUFBN0IsQ0FESixLQUdJa0MsS0FBSyxDQUFDMUYsT0FBTixHQUFjWCxNQUFNLENBQUNXLE9BQXJCO0FBQ1A7QUFDSjs7QUFDRCxTQUFPMEYsS0FBUDtBQUNILENBbEJNLEMsQ0FvQlA7QUFDQTs7QUFDTyxJQUFNOUcsWUFBWTtBQUFBLHFFQUFHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQU9HLGtCQUFQLDJEQUFjLEVBQWQ7QUFBa0JpSiwwQkFBbEI7QUFBa0MxRyxtQkFBbEM7QUFBMkMyRyxxQkFBM0M7QUFBQSw2Q0FFakIsSUFBSUMsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUNuQjtBQUNJLGtCQUFNQyxTQUFTLEdBQUN4SixtRUFBUyxDQUFDLE1BQUQsQ0FBekI7O0FBQ0Esa0JBQUd4RywyREFBTyxDQUFDZ1EsU0FBRCxDQUFWLEVBQ0E7QUFDSUMsNEJBQVksQ0FBQ04sY0FBRCxFQUFpQjFHLE9BQWpCLEVBQTBCMkcsU0FBMUIsQ0FBWjtBQUNBRSx1QkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNILGVBSkQsTUFNQTtBQUNJLG9CQUFNekosSUFBSSxHQUFDeUMsSUFBSSxDQUFDQyxLQUFMLENBQVdpSCxTQUFYLENBQVg7O0FBQ0Esb0JBQUdoUSwyREFBTyxDQUFDcUcsSUFBSSxDQUFDakUsRUFBTixDQUFQLElBQW9CcEMsMkRBQU8sQ0FBQ3FHLElBQUksQ0FBQ2tELEtBQU4sQ0FBM0IsSUFBMkN2SiwyREFBTyxDQUFDcUcsSUFBSSxDQUFDa0IsUUFBTixDQUFsRCxJQUFxRWxCLElBQUksQ0FBQ2tCLFFBQUwsR0FBZ0JwRyxJQUFJLENBQUM4RSxHQUFMLEVBQXhGLEVBQ0E7QUFDSTRGLHdGQUFZLENBQUMsTUFBRCxDQUFaO0FBQ0FvRSw4QkFBWSxDQUFDTixjQUFELEVBQWlCMUcsT0FBakIsRUFBMEIyRyxTQUExQixDQUFaO0FBQ0FFLHlCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0gsaUJBTEQsTUFPQTtBQUNJLHNCQUFNSSxHQUFHLEdBQUcsSUFBSTFILGNBQUosRUFBWjtBQUNBMEgscUJBQUcsQ0FBQ3pILElBQUosQ0FBUyxLQUFULEVBQWdCelUsMERBQU0sR0FBQ3dHLDJEQUFQLEdBQWtCRyxnRUFBbEIsR0FBa0MwTCxJQUFJLENBQUNrRCxLQUF2RDs7QUFDQTJHLHFCQUFHLENBQUNDLE1BQUosR0FBYSxZQUNiO0FBQ0ksd0JBQUlqRyxRQUFRLEdBQUNwQixJQUFJLENBQUNDLEtBQUwsQ0FBV21ILEdBQUcsQ0FBQ2xILFlBQWYsQ0FBYjs7QUFDQSx3QkFBSWtILEdBQUcsQ0FBQ3hKLE1BQUosS0FBZSxHQUFmLElBQXNCd0QsUUFBUSxDQUFDa0csT0FBL0IsSUFBMENsRyxRQUFRLENBQUM5SCxFQUFULElBQWV2QyxTQUE3RCxFQUNBO0FBQ0ksMEJBQUdxSyxRQUFRLENBQUM5SCxFQUFULEtBQWNpRSxJQUFJLENBQUNqRSxFQUF0QixFQUNBO0FBQ0lpRSw0QkFBSSxDQUFDeEssSUFBTCxHQUFVcU8sUUFBUSxDQUFDck8sSUFBbkI7QUFDQXdLLDRCQUFJLENBQUNnSyxRQUFMLEdBQWNuRyxRQUFRLENBQUNtRyxRQUF2QjtBQUNBaEssNEJBQUksQ0FBQ21ELGNBQUwsR0FBb0JVLFFBQVEsQ0FBQ1YsY0FBN0I7QUFDQW5ELDRCQUFJLENBQUNLLE1BQUwsR0FBWXdELFFBQVEsQ0FBQ3hELE1BQXJCLENBSkosQ0FJZ0M7O0FBQzVCMEUsNEZBQVUsQ0FBQyxNQUFELEVBQVMvRSxJQUFULENBQVYsQ0FMSixDQU1JOztBQUNBLDRCQUFHNkQsUUFBUSxDQUFDeEQsTUFBVCxLQUFrQixNQUFsQixJQUE0QndELFFBQVEsQ0FBQ29HLFFBQVQsSUFBcUIsQ0FBcEQsRUFDQTtBQUNJLDhCQUFNQyxVQUFVLEdBQUN0YywyREFBTyxHQUFDLEdBQVIsR0FBWXNSLGNBQWMsQ0FBQzFDLFdBQTVDO0FBQ0EsOEJBQUdxRyxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JoSCxJQUFoQixDQUFxQnFPLE9BQXJCLENBQTZCRCxVQUE3QixNQUEyQyxDQUFDLENBQS9DLEVBQ0lySCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JzSCxNQUFoQixDQUF1QixNQUFJbEwsY0FBYyxDQUFDMUMsV0FBbkIsR0FBK0IsWUFBdEQsRUFIUixDQUc0RTs7QUFDeEVpTixpQ0FBTyxDQUFDLElBQUQsQ0FBUDtBQUNILHlCQU5ELE1BUUE7QUFDSSw4QkFBR3BKLE1BQU0sQ0FBQ3hHLE1BQVAsS0FBZ0IsQ0FBaEIsSUFBcUJ3RyxNQUFNLENBQUM4SixPQUFQLENBQWV0RyxRQUFRLENBQUN4RCxNQUF4QixNQUFrQyxDQUFDLENBQTNELEVBQ0E7QUFDSXVKLHdDQUFZLENBQUNOLGNBQUQsRUFBaUIxRyxPQUFqQixFQUEwQjJHLFNBQTFCLENBQVo7QUFDQUUsbUNBQU8sQ0FBQyxLQUFELENBQVA7QUFDSCwyQkFKRCxNQU1JQSxPQUFPLENBQUMsSUFBRCxDQUFQO0FBQ1A7QUFDSix1QkF6QkQsTUEyQkE7QUFDSWpFLDhGQUFZLENBQUMsTUFBRCxDQUFaO0FBQ0FvRSxvQ0FBWSxDQUFDTixjQUFELEVBQWlCMUcsT0FBakIsRUFBMEIyRyxTQUExQixDQUFaO0FBQ0FFLCtCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixxQkFsQ0QsTUFvQ0E7QUFDSWpFLDRGQUFZLENBQUMsTUFBRCxDQUFaO0FBQ0FvRSxrQ0FBWSxDQUFDTixjQUFELEVBQWlCMUcsT0FBakIsRUFBMEIyRyxTQUExQixDQUFaO0FBQ0FFLDZCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBSSxxQkFBRyxDQUFDUSxPQUFKLEdBQWM7QUFBQSwyQkFBTVgsTUFBTSxDQUFDRyxHQUFHLENBQUNTLFVBQUwsQ0FBWjtBQUFBLG1CQUFkOztBQUNBVCxxQkFBRyxDQUFDeEcsSUFBSjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFabkQsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU0wSixZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDTixjQUFELEVBQWlCMUcsT0FBakIsRUFBMEIyRyxTQUExQixFQUNyQjtBQUNJLE1BQUcsQ0FBQzVQLDJEQUFPLENBQUNpSixPQUFELENBQVgsRUFDSW1DLG9FQUFVLENBQUMsU0FBRCxFQUFZbkMsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDakosMkRBQU8sQ0FBQzRQLFNBQUQsQ0FBWCxFQUNJeEUsb0VBQVUsQ0FBQyxLQUFELEVBQVF3RSxTQUFSLENBQVY7QUFDSixNQUFHLENBQUM1UCwyREFBTyxDQUFDMlAsY0FBRCxDQUFYLEVBQ0l6RyxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JzSCxNQUFoQixDQUF1QmQsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9ncm91cC5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9ncm91cC5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCIvLyBTaSBub24gdXRpbGlzw6ksIHN1cHByaW1lciBsJ2FwcGVsIGRlcyBKUyBmcm9udC1lbmQgcHVpcyByZWNvbXBpbGVyLlxuLy8gUmV2b2lyIGNvbW1lbnQgcsOpb3JnYW5pc2VyIGNlbGEgc291cy1mb3JtZSBkZSBtb2R1bGUgaW5kw6lwZW5kYW50LlxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIFN0YXRzIE1hdG9tbyA6XG4gICAgbWF0b21vOiB7IHVybDogXCJodHRwczovL3N0YXRzLmxlLWZhYi1sYWIuY29tL1wiLCBzaXRlSWQ6IFwiNVwiIH0sXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2Fuc3dlclwiOiBcIi4uL2xhbmcvZnIvYW5zd2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvYW5zd2VyJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwgOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IDx1PjxiPk5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TIHF1ZXN0aW9uczwvYj48L3U+LiBDJ2VzdCBjZXJ0YWluLCB2b3VzIGZlcmV6IG1pZXV4IGxhIHByb2NoYWluZSBmb2lzICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiA8dT48Yj5OQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUyBxdWVzdGlvbnM8L2I+PC91Pi4gQydlc3QgcGFzIG1hbCBkdSB0b3V0ICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogPHU+PGI+TkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMgcXVlc3Rpb25zPC9iPjwvdT4uIEJyYXZvICEgUmllbiBuZSB2b3VzIMOpY2hhcHBlICFcIixcbiAgICBuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIgZGUgc2Vjb25kZXMuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGF1c3NpIMOpbGV2w6kuXCIsXG4gICAgbmVlZE1pbk51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgbmUgcGV1dCDDqnRyZSBpbmbDqXJpZXVyIMOgIDEuXCIsXG4gICAgbmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWROdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIHN1cMOpcmlldXIgYXUgbm9tYnJlIGRlIHF1ZXN0aW9ucy5cIixcbiAgICBuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZi5cIixcbiAgICBuZWVkTWluTnVtYmVyU2Vjb25kZXNSZXNwb25zZSA6IFwiTGEgZHVyw6llIGRlIGxhIHLDqXBvbnNlIG5lIHBldXQgw6p0cmUgbsOpZ2F0aXZlLlwiLFxuICAgIG5vUHJldmlvdXNBbnN3ZXI6IFwiT24gZGlyYWl0IHF1ZSBjJ2VzdCBsYSBwcmVtacOocmUgZm9pcyBxdWUgdm91cyByw6lwb25kZXogw6AgY2UgcXVpei4gQm9ubmUgbGVjdHVyZSAhXCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzTGluZTogXCJMZSBEQVRFQU5TV0VSLCB2b3VzIGF2ZXogcsOpcG9uZHUgY29ycmVjdGVtZW50IMOgIE5CQ09SUkVDVEFOU1dFUlMgcXVlc3Rpb25zIHN1ciBOQlFVRVNUSU9OUyBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcy5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNTdGF0czogXCJFbiBtb3llbm5lLCB2b3VzIGF2ZXogcsOpcG9uZHUgw6AgY2UgcXVpeiBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcywgZW4gYXlhbnQgPGI+QVZHQ09SUkVDVEFOU1dFUlMgJSBkZSBib25uZXMgcsOpcG9uc2VzPC9iPi5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNUaXRsZTogXCJCb25qb3VyICNOT00sIHZvaWNpIHZvcyBwcsOpY8OpZGVudHMgcsOpc3VsdGF0cyDDoCBjZSBxdWl6XCIsXG4gICAgcmVzcG9uc2VTYXZlZEVycm9yIDogXCJDZXBlbmRhbnQgdW5lIGVycmV1ciBhIMOpdMOpIHJlbmNvbnRyw6llIGR1cmFudCBsJ2VucmVnaXN0cmVtZW50IGRlIHZvdHJlIHLDqXN1bHRhdC4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICByZXNwb25zZVNhdmVkTWVzc2FnZSA6IFwiVm90cmUgcsOpc3VsdGF0IGEgw6l0w6kgZW5yZWdpc3Ryw6kuIDxhIGhyZWY9Jy8jVVJMJz5BY2PDqGRlciDDoCB0b3VzIHZvcyBxdWl6czwvYT4uXCIsXG4gICAgc3RhdHNVc2VyOiBcIlZvdXMgYXZleiBlbnJlZ2lzdHLDqSA8Yj5OQkFOU1dFUlMgcsOpcG9uc2VTMSDDoCBOQlFVRVNUSU9OTkFJUkVTIHF1aXpTMiBkaWZmw6lyZW50UzM8L2I+IHN1ciBsZXMgTkJUT1RRVUVTVElPTk5BSVJFUyBwcm9wb3PDqVM0IHBhciBsZSBzaXRlLjxicj5FbiBtb3llbm5lLCB2b3VzIGF2ZXogbWlzIEFWR0RVUkFUSU9OIHNlY29uZGVzIMOgIHLDqXBvbmRyZSBldCBhdmV6IDxiPmNvcnJlY3RlbWVudCByw6lwb25kdSDDoCBBVkdDT1JSRUNUQU5TV0VSUyAlIGRlcyBxdWVzdGlvbnM8L2I+LlwiLFxuICAgIHdhbnRUb1NhdmVSZXNwb25zZXM6IFwiU2kgdm91cyBsZSBzb3VoYWl0ZXosIHZvdXMgcG91dmV6IDx1PjxiPnNhdXZlZ2FyZGVyIHZvdHJlIHLDqXN1bHRhdDwvYj48L3U+IGVuIGNyw6lhbnQgdm90cmUgY29tcHRlIGNpLWRlc3NvdXMuIENlbGEgdm91cyBwZXJtZXR0cmEgYXVzc2kgZGUgPHU+PGI+cmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBcXFwiZ3JhaW5lcyBkZSBjdWx0dXJlXFxcIjwvYj48L3U+IGRpcmVjdGVtZW50IHN1ciB2b3RyZSBlLW1haWwuXCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyDDoCBzdXBwcmltZXIgdW5lIGZvaXMgcXVlIHRvdXQgcsOpY3Vww6lyZXIgZHUgYmFja2VuZCA6XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmwgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICB1c2Vyc0dldENvbmZpZ1VybCA6IFwiL3VzZXIvZ2V0Y29uZmlnXCIsXG4gICAgbGFuZyA6IFwiZnJcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIlxufTsiLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBEJ0FGRklDSEVSIEVUIFLDiVBPTkRSRSDDgCBVTiBHUk9VUEUgREUgUVVJWlNcblxuLy8vIElsIG4nZXN0IHBhcyBuw6ljZXNzYWlyZSBkJ8OqdHJlIGNvbm5lY3TDqSBwb3VyIHLDqXBvbmRyZSBhdSBxdWl6IGV0IHZvaXIgc29uIHLDqXN1bHRhdC5cbi8vLyBNYWlzIHNpIHBhcyBjb25uZWN0w6ksIG9uIHByb3Bvc2Ugw6AgbCdpbnRlcm5hdXRlIGRlIHNlIGNvbm5lY3RlciBvdSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgc2F1dmVnYXJkZXIgc29uIHLDqXN1bHRhdC5cbi8vLyBEYW5zIGNlIGJ1dCBzb24gcsOpc3VsdGF0IGVzdCBzdG9ja8OpIGRhbnMgc29uIG5hdmlnYXRldXIuXG4vLy8gU2kgaWwgZXN0IGNvbm5lY3TDqSwgbCdlbnJlZ2lzdHJlbWVudCBkZSBzb24gcsOpc3VsdGF0IHNlIGZhaXQgYXV0b21hdGlxdWVtZW50IGPDtHTDqSBzZXJ2ZXVyIGV0IHNlcyDDqXZlbnR1ZWxzIHByw6ljw6lkZW50cyByw6lzdWx0YXRzIHNvbnQgYWZmaWNow6lzLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuaW1wb3J0IHsgZ2V0UHJldmlvdXNBbnN3ZXJzLCBncm91cFJvdXRlcywgc2F2ZUFuc3dlcnNSb3V0ZSB9IGZyb20gXCIuLi8uLi9jb25maWcvcXVlc3Rpb25uYWlyZXMuanNcIjtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyBjaGVja0Fuc3dlck91cHV0LCBzYXZlQW5zd2VyIH0gZnJvbSBcIi4vdG9vbHMvYW5zd2Vycy5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgbG9hZE1hdG9tbyB9IGZyb20gXCIuL3Rvb2xzL21hdG9tby5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRUaW1lRGlmZmVyZW5jZSB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBub1ByZXZpb3VzQW5zd2VyLCBwcmV2aW91c0Fuc3dlcnNMaW5lLCBwcmV2aW91c0Fuc3dlcnNTdGF0cywgcHJldmlvdXNBbnN3ZXJzVGl0bGUsIHJlc3BvbnNlU2F2ZWRFcnJvciwgd2FudFRvU2F2ZVJlc3BvbnNlcyB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9hbnN3ZXJcIik7XG5jb25zdCB7IHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBidG5TdWJtaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNoZWNrUmVzcG9uc2VzXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZXhwbGFuYXRpb25zVGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImV4cGxhbmF0aW9uc1RpdGxlXCIpO1xuY29uc3QgZXhwbGFuYXRpb25zQ29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhwbGFuYXRpb25zQ29udGVudFwiKTtcbmNvbnN0IG15Rm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ3JvdXBcIik7XG5cbi8vIEFmZmljaGUgbGUgYm91dG9uIGRlIHNvdW1pc3Npb24gKyBkw6ljbGVuY2hlIGxlIGNocm9ub23DqHRyZSBtZXN1cmFudCBsYSBkdXLDqWUgZGUgbGEgcsOpcG9uc2UuXG5sZXQgY2hyb25vQmVnaW49MDtcbmNvbnN0IGJlZ2luQW5zd2VyID0gKCkgPT5cbntcbiAgICBjaHJvbm9CZWdpbj1EYXRlLm5vdygpO1xuICAgIGJ0blN1Ym1pdC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbn1cblxubGV0IGlzQ29ubmVjdGVkLCB1c2VyO1xuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICAvLyBTaSBKUyBhY3RpdsOpLCBvbiBhZmZpY2hlIGxlIGJvdXRvbiBkZSBzb3VtaXNzaW9uIGR1IGZvcm11bGFpcmUgOlxuICAgICAgICBiZWdpbkFuc3dlcigpO1xuICAgICAgICBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1widXNlclwiXSk7Ly8gXCJ1c2VyXCIgY2FyIHNldWxzIGxlcyB1dGlsaXNhdGV1cnMgZGUgYmFzZSBwZXV2ZW50IGVucmVnaXN0cmVyIGxldXJzIHLDqXBvbnNlcyBhdXggcXVpenNcbiAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBlc3QgY29ubmVjdMOpIGV0IGEgZMOpasOgIHLDqXBvbmR1IMOgIGNlIHF1aXosIG9uIGFmZmljaGUgc2VzIHByw6ljw6lkZW50ZXMgcsOpcG9uc2VzIMOgIGxhIHBsYWNlIGR1IHRleHRlIHNlcnZhbnQgw6AgZXhwbGlxdWVyIGxlIHRvcG8gYXV4IG5vdXZlYXV4XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpOy8vIGxpZW4gdmVycyBsZSBjb21wdGUgYWRhcHTDqSBwb3VyIGxlcyB1dGlsaXNhdGV1cnMgY29ubmVjdMOpc1xuICAgICAgICAgICAgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyh1c2VyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBsb2FkTWF0b21vKCk7XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcbmhlbGxvRGV2KCk7XG5cbi8vIFRyYWl0ZW1lbnQgZGUgbCdlbnZvaSBkZSBsYSByw6lwb25zZSBkZSBsJ3V0aWxpc2F0ZXVyIDpcbmxldCBhbnN3ZXIgPSB7fTtcbm15Rm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAgICAgIFxuICAgICAgICBidG5TdWJtaXQuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjsvLyBzZXVsZW1lbnQgdW4gZW52b2kgw6AgbGEgZm9pcywgU1ZQIDopXG4gICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiOy8vIHN1cHByaW1lIGxlcyDDqXZlbnR1ZWxzIG1lc3NhZ2VzIGTDqWrDoCBhZmZpY2jDqXMuXG4gICAgICAgIGNvbnN0IHVzZXJSZXNwb25zZXM9Z2V0RGF0YXNGcm9tSW5wdXRzKG15Rm9ybSk7XG4gICAgICAgIGFuc3dlci5kdXJhdGlvbj1NYXRoLnJvdW5kKChEYXRlLm5vdygpLWNocm9ub0JlZ2luKS8xMDAwKTtcbiAgICAgICAgYW5zd2VyLm5iUXVlc3Rpb25zPTA7XG4gICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzPTA7XG4gICAgICAgIGFuc3dlci5Hcm91cElkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ3JvdXBJZFwiKS52YWx1ZTtcbiAgICAgICAgLy8gTGVzIHLDqXBvbnNlcyBzb250IHJlZ3JvdXDDqWVzIHBhciBxdWVzdGlvbiwgZG9uYyBxdWFuZCBpZFF1ZXN0aW9uIGNoYW5nZSwgb24gY29ubmHDrnQgbGUgcsOpc3VsdGF0IHBvdXIgbGEgcXVlc3Rpb24gcHLDqWPDqWRlbnRlLlxuICAgICAgICAvLyBQb3VyIHF1J3VuZSByw6lwb25zZSBzb2l0IGJvbm5lLCBpbCBmYXV0IGNvY2hlciB0b3V0ZXMgbGVzIGJvbm5lcyByw6lwb25zZXMgKHNpIFFDTSkgw6AgbGEgcXVlc3Rpb24gRVQgY29jaGVyIGF1Y3VuZSBkZXMgbWF1dmFpc2VzLlxuICAgICAgICBsZXQgaWRDaG9pY2UsIGlkUXVlc3Rpb249XCJcIiwgZ29vZFJlc3BvbnNlPWZhbHNlO1xuICAgICAgICBmb3IobGV0IGl0ZW0gaW4gdXNlclJlc3BvbnNlcylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoaXRlbS5zdGFydHNXaXRoKFwiaXNDb3JyZWN0X3Jlc3BvbnNlX1wiKSkvLyA9IE5vdXZlbGxlIHLDqXBvbnNlIHBvc3NpYmxlLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkQ2hvaWNlID0gaXRlbS5zdWJzdHJpbmcoaXRlbS5sYXN0SW5kZXhPZihcIl9cIikgKyAxKTtcbiAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicXVlc3Rpb25faWRfcmVzcG9uc2VfXCIraWRDaG9pY2VdICE9IGlkUXVlc3Rpb24pIC8vID0gb24gY29tbWVuY2Ugw6AgdHJhaXRlciB1bmUgbm91dmVsbGUgcXVlc3Rpb24uXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZFF1ZXN0aW9uPXVzZXJSZXNwb25zZXNbXCJxdWVzdGlvbl9pZF9yZXNwb25zZV9cIitpZENob2ljZV07XG4gICAgICAgICAgICAgICAgICAgIGFuc3dlci5uYlF1ZXN0aW9ucysrO1xuICAgICAgICAgICAgICAgICAgICBpZihnb29kUmVzcG9uc2UpIC8vID0gcGFzIGQnZXJyZXVyIMOgIGxhIHF1ZXN0aW9uIHByw6ljw6lkZW50ZVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMrKztcbiAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPXRydWU7Ly8gTGEgcsOpcG9uc2UgZXN0IGNvbnNpZMOpcsOpZSBjb21tZSBib25uZSwganVzcXUnw6AgbGEgcHJlbWnDqHJlIGVycmV1ci4uLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW2l0ZW1dID09IFwidHJ1ZVwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZV9cIitpZENob2ljZSkucGFyZW50Tm9kZS5jbGFzc0xpc3QuYWRkKFwiaXNDb3JyZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdID09PSB1bmRlZmluZWQpLy8gPSB1bmUgYm9ubmUgcsOpcG9uc2UgbidhIHBhcyDDqXTDqSBzw6lsZWN0aW9ubsOpZVxuICAgICAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPWZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdID09PSBcIm9uXCIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RSZXNwb25zZT1mYWxzZTsgLy8gPSB1bmUgbWF1dmFpc2UgcsOpcG9uc2UgYSDDqXTDqSBzw6lsZWN0aW9ubsOpZVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZV9cIitpZENob2ljZSkucGFyZW50Tm9kZS5jbGFzc0xpc3QuYWRkKFwiaXNOb3RDb3JyZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNpIGonYWkgYmllbiByw6lwb25kdSDDoCBsYSBkZXJuacOocmUgcXVlc3Rpb24sIGlsIGZhdXQgbGUgY29tcHRlciBpY2ksIGNhciBvbiBlc3Qgc29ydGkgZGUgbGEgYm91Y2xlIDpcbiAgICAgICAgaWYoZ29vZFJlc3BvbnNlKVxuICAgICAgICAgICAgYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMrKztcblxuICAgICAgICAvLyBBZmZpY2hhZ2UgZHUgcsOpc3VsdGF0LCBzdWl2YW50IHNpIGwndXRpbGlzYXRldXIgZXN0IGNvbm5lY3TDqSBvdSBwYXMgZXQgc29uIHNjb3JlIDpcbiAgICAgICAgbGV0IGdldE91cHV0PWNoZWNrQW5zd2VyT3VwdXQoYW5zd2VyKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgZXN0IGNvbm5lY3TDqSwgb24gcGFzc2Ugc29uIHLDqXN1bHRhdCBhdSBzZXJ2ZXVyIHBvdXIgbGUgc2F1dmVnYXJkZXIuXG4gICAgICAgICAgICBjb25zdCB4aHJTYXZlQW5zd2VyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtncm91cFJvdXRlcytzYXZlQW5zd2Vyc1JvdXRlKTtcbiAgICAgICAgICAgIHhoclNhdmVBbnN3ZXIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4aHJSZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgKHhoclJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIreGhyUmVzcG9uc2UubWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIrcmVzcG9uc2VTYXZlZEVycm9yLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ1RlbXBsYXRlLnVzZXJIb21lUGFnZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFB1aXMgb24gbGUgcmVkaXJpZ2UgdmVycyBzb24gcsOpc3VsdGF0IDpcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVyZT13aW5kb3cubG9jYXRpb247Ly8gd2luZG93LmxvY2F0aW9uIMOgIGFqb3V0ZXIgcG91ciBuZSBwYXMgcXVpdHRlciBsYSBwYWdlIGVuIG1vZGUgXCJwcmV2aWV3XCIuLi5cbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJleHBsYW5hdGlvbnNcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgIGFuc3dlci50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZSgpOy8vIE9uIGVuIHByb2ZpdGUgcG91ciBtZXR0cmUgbGVzIHBlbmR1bGVzIMOgIGwnaGV1cmUuXG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLnNlbmQoSlNPTi5zdHJpbmdpZnkoYW5zd2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7ICAgLy8gU2kgaW50ZXJuYXV0ZSBub24gY29ubmVjdMOpLCBvbiBlbnJlZ2lzdHJlIGxlIHLDqXN1bHRhdCBjw7R0w6kgY2xpZW50IHBvdXIgcGVybWV0dHJlIGRlIGxlIHJldHJvdXZlciBhdSBtb21lbnQgZGUgbGEgY3LDqWF0aW9uIGR1IGNvbXB0ZSBvdSBkZSBsYSBjb25uZXhpb24uXG4gICAgICAgICAgICBpZihzYXZlQW5zd2VyKGFuc3dlcikpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIGdldE91cHV0Kz1cIjwvcD48cD5cIit3YW50VG9TYXZlUmVzcG9uc2VzK1wiPC9wPlwiO1xuICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgZ2V0T3VwdXQsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnN1YnNjcmliZUJ0bnNcIikuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIC8vIE1haXMgaW51dGlsZSBkZSBwcm9wb3NlciBkZSBjcsOpZXIgdW4gY29tcHRlIHNpIGxlIHN0b2NrYWdlIGxvY2FsIG5lIGZvbmN0aW9ubmUgcGFzXG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGdldE91cHV0LCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgIC8vIFB1aXMgb24gbGUgcmVkaXJpZ2UgdmVycyBzb24gcsOpc3VsdGF0IDpcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoPVwiXCI7XG4gICAgICAgICAgICBjb25zdCBoZXJlPXdpbmRvdy5sb2NhdGlvbjsvLyB3aW5kb3cubG9jYXRpb24gw6AgYWpvdXRlciBwb3VyIG5lIHBhcyBxdWl0dGVyIGxhIHBhZ2UgZW4gbW9kZSBcInByZXZpZXdcIi4uLlxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJyZXNwb25zZVwiO1xuICAgICAgICB9XG4gICAgICAgIC8vICsgQWZmaWNoYWdlIGRlcyB0ZXh0ZXMgZCdleHBsaWNhdGlvbnMgcG91ciBjaGFxdWUgcXVlc3Rpb25cbiAgICAgICAgY29uc3QgZXhwbGFuYXRpb25zPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaGVscFwiKTtcbiAgICAgICAgZm9yKGxldCBpIGluIGV4cGxhbmF0aW9ucylcbiAgICAgICAgICAgIGlmKGV4cGxhbmF0aW9uc1tpXS5zdHlsZSAhPT0gdW5kZWZpbmVkKSAvLyBzaW5vbiwgbGEgY29uc29sZSBhZmZpY2hlIHVuZSBlcnJldXIgXCJUeXBlRXJyb3I6IGV4cGxhbmF0aW9uc1tpXS5zdHlsZSBpcyB1bmRlZmluZWRcIiwgYmllbiBxdWUgdG91dCBmb25jdGlvbm5lICg/KVxuICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uc1tpXS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn0pXG5cbi8vIEZvbmN0aW9uIHbDqXJpZmlhbnQgbGVzIHByw6ljw6lkZW50ZXMgcsOpcG9uc2VzIGRlIGwndXRpbGlzYXRldXIuXG4vLyBVdGlsZSBzaSBjb25uZWN0w6kgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQgZGUgbGEgcGFnZSwgcHVpcyBhcHLDqHMgdW5lIG5vdXZlbGxlIHLDqXBvbnNlLlxuY29uc3QgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyA9ICh1c2VyKSA9Plxue1xuICAgIGNvbnN0IHhoclByZXZpb3VzUmVzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyUHJldmlvdXNSZXMub3BlbihcIkdFVFwiLCBhcGlVcmwrZ3JvdXBSb3V0ZXMrZ2V0UHJldmlvdXNBbnN3ZXJzK3VzZXIuaWQrXCIvXCIrZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJncm91cElkXCIpLnZhbHVlKTtcbiAgICB4aHJQcmV2aW91c1Jlcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5iUmVzcG9uc2VzPXJlc3BvbnNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNBbnN3ZXJzQ29udGVudD1cIlwiO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zVGl0bGUsIFwic3BhblwiLCBwcmV2aW91c0Fuc3dlcnNUaXRsZS5yZXBsYWNlKFwiI05PTVwiLCB1c2VyLm5hbWUpKTtcbiAgICAgICAgICAgICAgICBpZihuYlJlc3BvbnNlcyE9PTApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG90TmJRdWVzdGlvbnM9MCwgdG90TmJDb3JyZWN0QW5zd2Vycz0wLCB0b3REdXJhdGlvbj0wLCBtYXBMaW5lQ29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3ROYlF1ZXN0aW9ucys9cmVzcG9uc2VbaV0ubmJRdWVzdGlvbnM7Ly8gISBvbiBuZSBwZXV0IHNlIGJhc2VyIHN1ciBsYSB2ZXJzaW9uIGFjdHVlbGxlIGR1IHF1aXosIGNhciBsZSBub21icmUgZGUgcXVlc3Rpb25zIGEgcHUgw6l2b2x1ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3ROYkNvcnJlY3RBbnN3ZXJzKz1yZXNwb25zZVtpXS5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90RHVyYXRpb24rPXJlc3BvbnNlW2ldLmR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwTGluZUNvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVBTlNXRVIgOiBkYXRlRm9ybWF0KHJlc3BvbnNlW2ldLmNyZWF0ZWRBdCwgbGFuZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJDT1JSRUNUQU5TV0VSUyA6IHJlc3BvbnNlW2ldLm5iQ29ycmVjdEFuc3dlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJRVUVTVElPTlMgOiByZXNwb25zZVtpXS5uYlF1ZXN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkdEVVJBVElPTiA6IHJlc3BvbnNlW2ldLmR1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbnN3ZXJzQ29udGVudCs9XCI8bGk+XCIrcmVwbGFjZUFsbChwcmV2aW91c0Fuc3dlcnNMaW5lLCBtYXBMaW5lQ29udGVudCkrXCI8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hcExpbmVDb250ZW50ID1cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgQVZHRFVSQVRJT04gOiBNYXRoLnJvdW5kKHRvdER1cmF0aW9uL25iUmVzcG9uc2VzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFWR0NPUlJFQ1RBTlNXRVJTIDogTWF0aC5yb3VuZCh0b3ROYkNvcnJlY3RBbnN3ZXJzL3RvdE5iUXVlc3Rpb25zKjEwMClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbnN3ZXJzQ29udGVudD1cIjxoNT5cIityZXBsYWNlQWxsKHByZXZpb3VzQW5zd2Vyc1N0YXRzLCBtYXBMaW5lQ29udGVudCkrXCI8L2g1PlwiK3ByZXZpb3VzQW5zd2Vyc0NvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zQ29udGVudCwgXCJ1bFwiLCBwcmV2aW91c0Fuc3dlcnNDb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGV4cGxhbmF0aW9uc0NvbnRlbnQsIFwidWxcIiwgbm9QcmV2aW91c0Fuc3dlcik7XG4gICAgICAgICAgICAgICAgLy8gZGFucyB1biBjYXMgY29tbWUgZGFucyBsJ2F1dHJlLCBib3V0b24gcG91ciByZXZlbmlyIMOgIGwnYWNjdWVpbCBkdSBjb21wdGVcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGV4cGxhbmF0aW9uc0NvbnRlbnQsIFwicFwiLCBcIjxhIGhyZWY9XFxcIi9cIitjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2UrXCJcXFwiIGNsYXNzPVxcXCJidXR0b24gY2FyZGJvYXJkXFxcIj5cIitjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2VUeHQrXCI8L2E+XCIsIFwiXCIsIFtcImJ0blwiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHhoclByZXZpb3VzUmVzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgIHhoclByZXZpb3VzUmVzLnNlbmQoKTtcbn0iLCJjb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi9jb25maWcvZ2VuZXJhbFwiKTtcblxuaW1wb3J0IHsgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vLi4vbGFuZy9cIitjb25maWdGcm9udEVuZC5sYW5nK1wiL2Fuc3dlclwiKTtcblxuLy8gRW5yZWdpc3RyZW1lbnQgY8O0dMOpIGNsaWVudCBkdSBkZXJuaWVyIHLDqXN1bHRhdCDDoCB1biBxdWl6IGVuIGF0dGVuZGFudCBkJ8OqdHJlIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IHNhdmVBbnN3ZXIgPSAoYW5zd2VyKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAge1xuICAgICAgICBzYXZlTG9jYWx5KFwibGFzdEFuc3dlclwiLCBhbnN3ZXIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFJldG91cm5lIHVuIHRleHRlIHN1aXZhbnQgbGUgbm9tYnJlIGRlIGJvbm5lcyByw6lwb25zZXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlck91cHV0ID0gKGFuc3dlcikgPT5cbntcbiAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmF0aW89YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMvYW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICBjb25zdCBtYXBPYmo9XG4gICAgICAgIHtcbiAgICAgICAgICAgIERVUkFUSU9OOiBhbnN3ZXIuZHVyYXRpb24sXG4gICAgICAgICAgICBOQkNPUlJFQ1RBTlNXRVJTOiBhbnN3ZXIubmJDb3JyZWN0QW5zd2VycyxcbiAgICAgICAgICAgIE5CUVVFU1RJT05TOiBhbnN3ZXIubmJRdWVzdGlvbnNcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3V0cHV0PVwiXCI7XG4gICAgICAgIGlmKHJhdGlvIDwgMC40KVxuICAgICAgICAgICAgb3V0cHV0PXJlcGxhY2VBbGwodHh0LmNoZWNrUmVzcG9uc2VzT3VwdXRGYWlsLCBtYXBPYmopO1xuICAgICAgICBlbHNlIGlmKHJhdGlvIDwgMC44KVxuICAgICAgICAgICAgb3V0cHV0PXJlcGxhY2VBbGwodHh0LmNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0sIG1hcE9iaik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG91dHB1dD1yZXBsYWNlQWxsKHR4dC5jaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcywgbWFwT2JqKTtcbiAgICAgICAgaWYob3V0cHV0KVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIFwiXCI7XG59IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvYW5zd2VyLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2dyb3VwLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9hbnN3ZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9tYXRvbW8uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiZGVmYXVsdFJlY2VpcHREYXlzIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsImZpZWxkTmV3UXVlc3Rpb25uYWlyZXMiLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbiIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4IiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmVzIiwiZGlyV2ViUXVlc3Rpb25uYWlyZXMiLCJtYXRvbW8iLCJ1cmwiLCJzaXRlSWQiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInJlZ2VuZXJhdGVIVE1MIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdyb3VwUm91dGVzIiwiZ2V0R3JvdXBSb3V0ZSIsInByZXZpZXdHcm91cFJvdXRlcyIsInNlYXJjaEdyb3Vwc1JvdXRlIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRBZG1pblN0YXRzIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwiLCJjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIiwiY2hlY2tSZXNwb25zZXNPdXB1dFN1Y2Nlc3MiLCJuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UiLCJuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNaW5OdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZE1pbk51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyU2Vjb25kZXNSZXNwb25zZSIsIm5vUHJldmlvdXNBbnN3ZXIiLCJwcmV2aW91c0Fuc3dlcnNMaW5lIiwicHJldmlvdXNBbnN3ZXJzU3RhdHMiLCJwcmV2aW91c0Fuc3dlcnNUaXRsZSIsInJlc3BvbnNlU2F2ZWRFcnJvciIsInJlc3BvbnNlU2F2ZWRNZXNzYWdlIiwic3RhdHNVc2VyIiwid2FudFRvU2F2ZVJlc3BvbnNlcyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwidXNlcnNHZXRDb25maWdVcmwiLCJjb25maWdUZW1wbGF0ZSIsImJ0blN1Ym1pdCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZSZXNwb25zZSIsImV4cGxhbmF0aW9uc1RpdGxlIiwiZXhwbGFuYXRpb25zQ29udGVudCIsIm15Rm9ybSIsImNocm9ub0JlZ2luIiwiYmVnaW5BbnN3ZXIiLCJub3ciLCJzdHlsZSIsImRpc3BsYXkiLCJpc0Nvbm5lY3RlZCIsInVzZXIiLCJpbml0aWFsaXNlIiwiY2hlY2tTZXNzaW9uIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJjaGVja1ByZXZpb3VzUmVzcG9uc2VzIiwibG9hZE1hdG9tbyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWxsb0RldiIsImFuc3dlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJwcmV2ZW50RGVmYXVsdCIsImlubmVySFRNTCIsInVzZXJSZXNwb25zZXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJkdXJhdGlvbiIsInJvdW5kIiwibmJRdWVzdGlvbnMiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiR3JvdXBJZCIsImlkQ2hvaWNlIiwiaWRRdWVzdGlvbiIsImdvb2RSZXNwb25zZSIsIml0ZW0iLCJzdGFydHNXaXRoIiwibGFzdEluZGV4T2YiLCJwYXJlbnROb2RlIiwiY2xhc3NMaXN0IiwiYWRkIiwiZ2V0T3VwdXQiLCJjaGVja0Fuc3dlck91cHV0IiwieGhyU2F2ZUFuc3dlciIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwieGhyUmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJtZXNzYWdlIiwid2luZG93IiwibG9jYXRpb24iLCJoYXNoIiwiaGVyZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJzZW5kIiwic3RyaW5naWZ5Iiwic2F2ZUFuc3dlciIsImFkZEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZXhwbGFuYXRpb25zIiwicXVlcnlTZWxlY3RvckFsbCIsInhoclByZXZpb3VzUmVzIiwicmVzcG9uc2UiLCJuYlJlc3BvbnNlcyIsInByZXZpb3VzQW5zd2Vyc0NvbnRlbnQiLCJ0b3ROYlF1ZXN0aW9ucyIsInRvdE5iQ29ycmVjdEFuc3dlcnMiLCJ0b3REdXJhdGlvbiIsIm1hcExpbmVDb250ZW50IiwiREFURUFOU1dFUiIsImRhdGVGb3JtYXQiLCJjcmVhdGVkQXQiLCJOQkNPUlJFQ1RBTlNXRVJTIiwiTkJRVUVTVElPTlMiLCJBVkdEVVJBVElPTiIsInJlcGxhY2VBbGwiLCJBVkdDT1JSRUNUQU5TV0VSUyIsImNvbmZpZ0Zyb250RW5kIiwidHh0IiwiUXVlc3Rpb25uYWlyZUlkIiwic2F2ZUxvY2FseSIsInJhdGlvIiwiRFVSQVRJT04iLCJvdXRwdXQiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiaW5wdXRzQ29uZiIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImRhdGFzIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImVudHJpZSIsImVudHJpZXMiLCJlbXB5Rm9ybSIsInR5cGUiLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwiX3BhcSIsInB1c2giLCJzZWxmIiwiZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCIsIm5vd1RzIiwiZ2V0VGltZSIsInZpc2l0b3JJbmZvIiwiZ2V0VmlzaXRvckluZm8iLCJjcmVhdGVUcyIsInBhcnNlSW50IiwiY29va2llVGltZW91dCIsIm9yaWdpbmFsVGltZW91dCIsInNldFZpc2l0b3JDb29raWVUaW1lb3V0IiwidSIsImQiLCJnIiwicyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYXN5bmMiLCJzcmMiLCJpbnNlcnRCZWZvcmUiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIiwiYXNzaWduIiwib25lcnJvciIsInN0YXR1c1RleHQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLG1DQUFELENBQXJCOztBQUNBLElBQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQyxxREFBRCxDQUE5Qjs7QUFFQUUsTUFBTSxDQUFDQyxPQUFQO0FBRUlDLFFBQU0sRUFBRSwyQkFGWjtBQUdJQyxTQUFPLEVBQUUsdUJBSGI7QUFJSUMsV0FBUyxFQUFFLFNBSmY7QUFLSUMsWUFBVSxFQUFFLG1CQUxoQjtBQU1JQyxZQUFVLEVBQUUsbUJBTmhCO0FBT0lDLGFBQVcsRUFBRSx1QkFQakI7QUFRSUMsV0FBUyxFQUFFLElBUmY7QUFTSUMsT0FBSyxFQUFFLFdBVFg7QUFTd0I7QUFDcEJDLGdCQUFjLEVBQUUsQ0FBQyxJQUFELENBVnBCO0FBVTJCO0FBQ3ZCQyxVQUFRLEVBQUUsbUJBWGQ7QUFZSUMsb0JBQWtCLEVBQUUsSUFaeEI7QUFZOEI7QUFDMUJDLG9CQUFrQixFQUFFLEtBYnhCO0FBYStCO0FBQzNCQywwQkFBd0IsRUFBRSxHQWQ5QjtBQWNtQztBQUMvQkMsOEJBQTRCLEVBQUUsQ0FmbEM7QUFlcUM7QUFDakNDLGtDQUFnQyxFQUFFLEtBaEJ0QztBQWdCNkM7QUFDekNDLDJCQUF5QixFQUFFLElBakIvQjtBQWtCSUMsOEJBQTRCLEVBQUUsS0FsQmxDO0FBbUJJQyw2QkFBMkIsRUFBRSxVQW5CakM7QUFvQklDLCtCQUE2QixFQUFFLElBcEJuQztBQW9Cd0M7QUFDcENDLDRCQUEwQixFQUFFLElBckJoQztBQXNCSUMsZ0NBQThCLEVBQUUsUUF0QnBDO0FBc0I4QztBQUMxQ0MseUJBQXVCLEVBQUUsQ0F2QjdCO0FBdUIrQjtBQUMzQkMseUNBQXVDLEVBQUUsQ0F4QjdDO0FBeUJJQywwQ0FBd0MsRUFBRSxFQXpCOUM7QUEwQklDLDJDQUF5QyxFQUFFLENBMUIvQztBQTJCSUMsbUNBQWlDLEVBQUUsR0EzQnZDO0FBNEJJO0FBQ0FDLGdCQUFjLEVBQUUsQ0E3QnBCO0FBNkJ1QjtBQUNuQkMsZ0JBQWMsRUFBRSxDQTlCcEI7QUE4QnVCO0FBQ25CQyxjQUFZLEVBQUUsRUEvQmxCO0FBZ0NJQyxxQkFBbUIsRUFBRSxFQWhDekI7QUFnQzRCO0FBQ3hCQywrQkFBNkIsRUFBQyxDQWpDbEM7QUFpQ3FDO0FBQ2pDQyw2QkFBMkIsRUFBQyxFQWxDaEM7QUFrQ29DO0FBQ2hDQyxrQ0FBZ0MsRUFBRSxFQW5DdEM7QUFtQzBDO0FBQ3RDQyx5QkFBdUIsRUFBRSxDQXBDN0I7QUFxQ0lDLHdCQUFzQixFQUFHLGNBckM3QjtBQXFDNkM7QUFDekM7QUFDQUMsNEJBQTBCLEVBQUUsQ0F2Q2hDO0FBd0NJQyw0QkFBMEIsRUFBRSxDQXhDaEM7QUF5Q0k7QUFDQUMsb0JBQWtCLEVBQUUsQ0ExQ3hCO0FBMkNJQyxvQkFBa0IsRUFBRSxDQTNDeEI7QUE0Q0lDLDRCQUEwQixFQUFFLE9BNUNoQztBQTRDd0M7QUFDcENDLDBCQUF3QixFQUFFLENBQUUsV0FBRixFQUFlLFlBQWYsRUFBNkIsV0FBN0IsRUFBMEMsV0FBMUMsRUFBdUQsV0FBdkQsQ0E3QzlCO0FBOENJO0FBQ0FDLDJCQUF5QixFQUFFLEdBL0MvQjtBQWdESUMscUNBQW1DLEVBQUUsR0FoRHpDO0FBaURJO0FBQ0FDLFlBQVUsRUFBRSxDQWxEaEI7QUFtRElDLFlBQVUsRUFBRTtBQW5EaEIsc0RBcURvQixDQXJEcEIsc0RBc0RvQixDQXREcEIsb0RBdURrQixFQXZEbEIseURBeUR1QmpELEtBQUssQ0FBQ2tELFFBQU4sQ0FBZUMsU0F6RHRDLHFEQTBEbUJuRCxLQUFLLENBQUNvRCxhQTFEekIsNERBMkQwQnBELEtBQUssQ0FBQ3FELG9CQTNEaEMsOERBNEQ0Qm5ELGNBQWMsQ0FBQ29ELHNCQTVEM0MseURBNkR1QnBELGNBQWMsQ0FBQ3FELGlCQTdEdEMsbUVBOERpQ3JELGNBQWMsQ0FBQ3NELDJCQTlEaEQsNkRBK0QyQnRELGNBQWMsQ0FBQ3VELHFCQS9EMUMsNERBZ0UwQnZELGNBQWMsQ0FBQ3dELG9CQWhFekMsb0I7Ozs7Ozs7Ozs7O0FDSEE7QUFDQTtBQUNBdkQsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTtBQUNBdUQsUUFBTSxFQUFFO0FBQUVDLE9BQUcsRUFBRSwrQkFBUDtBQUF3Q0MsVUFBTSxFQUFFO0FBQWhEO0FBRlosQ0FEQSxDOzs7Ozs7Ozs7OztBQ0ZBMUQsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTtBQUNBMEQscUJBQW1CLEVBQUUsZ0JBRnpCO0FBRTBDO0FBQ3RDQywyQkFBeUIsRUFBRSw2QkFIL0I7QUFJSUMsd0JBQXNCLEVBQUUsTUFKNUI7QUFLSUMsOEJBQTRCLEVBQUcsWUFMbkM7QUFNSUMsd0JBQXNCLEVBQUcsU0FON0I7QUFPSUMsNEJBQTBCLEVBQUUsVUFQaEM7QUFRSUMsOEJBQTRCLEVBQUUsUUFSbEM7QUFTSUMsZ0JBQWMsRUFBRSxrQkFUcEI7QUFVSUMsZ0NBQThCLEVBQUcsY0FWckM7QUFXSUMsMkJBQXlCLEVBQUcsU0FYaEM7QUFZSTtBQUNBQyxhQUFXLEVBQUUsUUFiakI7QUFjSUMsZUFBYSxFQUFFLE9BZG5CO0FBZUlDLG9CQUFrQixFQUFFLFVBZnhCO0FBZ0JJQyxtQkFBaUIsRUFBRyxTQWhCeEI7QUFpQkk7QUFDQUMsZ0JBQWMsRUFBRSxZQWxCcEI7QUFtQkk7QUFDQUMsaUJBQWUsRUFBRSxlQXBCckI7QUFxQkk7QUFDQUMsZUFBYSxFQUFFLGlCQXRCbkI7QUF1QklDLG9CQUFrQixFQUFFLGdCQXZCeEI7QUF3QklDLGlCQUFlLEVBQUcsdUJBeEJ0QjtBQXdCOEM7QUFDMUNDLGtCQUFnQixFQUFFLFVBekJ0QjtBQXlCaUM7QUFDN0I7QUFDQUMsZUFBYSxFQUNiO0FBQ0lDLFNBQUssRUFBRTtBQUFFQyxlQUFTLEVBQUUsR0FBYjtBQUFrQkMsY0FBUSxFQUFFO0FBQTVCLEtBRFg7QUFFSUMsUUFBSSxFQUFFO0FBQUVGLGVBQVMsRUFBRTtBQUFiLEtBRlY7QUFFOEI7QUFDMUJHLGdCQUFZLEVBQUU7QUFBRUYsY0FBUSxFQUFFO0FBQVo7QUFIbEIsR0E1Qko7QUFpQ0lHLHNCQUFvQixFQUFHO0FBQUVyQyxhQUFTLEVBQUUsQ0FBYjtBQUFnQmtDLFlBQVEsRUFBRTtBQUExQixHQWpDM0I7QUFrQ0lJLE9BQUssRUFDTDtBQUNJTixTQUFLLEVBQUU7QUFBRUMsZUFBUyxFQUFFLEdBQWI7QUFBa0JDLGNBQVEsRUFBRTtBQUE1QixLQURYO0FBRUlDLFFBQUksRUFBRTtBQUFFRixlQUFTLEVBQUU7QUFBYixLQUZWLENBRThCOztBQUY5QixHQW5DSjtBQXVDSU0sVUFBUSxFQUNSO0FBQ0lDLFFBQUksRUFBRTtBQUFFUCxlQUFTLEVBQUUsR0FBYjtBQUFrQkMsY0FBUSxFQUFFO0FBQTVCLEtBRFY7QUFFSU8sUUFBSSxFQUFFO0FBQUVQLGNBQVEsRUFBRSxJQUFaO0FBQWtCUSxTQUFHLEVBQUMsQ0FBdEI7QUFBeUJDLGtCQUFZLEVBQUM7QUFBdEM7QUFGVixHQXhDSjtBQTRDSUMsUUFBTSxFQUNOO0FBQ0lKLFFBQUksRUFBRTtBQUFFUCxlQUFTLEVBQUUsR0FBYjtBQUFrQkMsY0FBUSxFQUFFO0FBQTVCO0FBRFYsR0E3Q0o7QUFnRElXLFFBQU0sRUFBRTtBQUFFN0MsYUFBUyxFQUFFLENBQWI7QUFBZ0JrQyxZQUFRLEVBQUU7QUFBMUIsR0FoRFo7QUFpRElZLGNBQVksRUFBRTtBQUFFOUMsYUFBUyxFQUFFLENBQWI7QUFBZ0JrQyxZQUFRLEVBQUU7QUFBMUIsR0FqRGxCO0FBa0RJO0FBQ0FhLGdCQUFjLEVBQUcsNkJBbkRyQjtBQW9ESTVDLHdCQUFzQixFQUFHLHNCQXBEN0I7QUFxRElDLG1CQUFpQixFQUFHLGdDQXJEeEI7QUFzREk0QyxjQUFZLEVBQUcsMkJBdERuQjtBQXVESTNDLDZCQUEyQixFQUFHLDRCQXZEbEM7QUF3REk7QUFDQTRDLGVBQWEsRUFBRyxzQkF6RHBCO0FBMERJM0MsdUJBQXFCLEVBQUcsbUJBMUQ1QjtBQTJESTRDLGFBQVcsRUFBRyxvQkEzRGxCO0FBNERJQyxhQUFXLEVBQUcsb0JBNURsQjtBQTZESTtBQUNBQyxjQUFZLEVBQUcsU0E5RG5CO0FBK0RJN0Msc0JBQW9CLEVBQUcsTUEvRDNCO0FBZ0VJOEMsWUFBVSxFQUFHLFFBaEVqQjtBQWlFSUMsWUFBVSxFQUFHLFFBakVqQjtBQWtFSTtBQUNBQyxpQkFBZSxFQUFHLENBbkV0Qjs7QUFvRUk7QUFDQTNFLGdCQUFjLEVBQUUsQ0FyRXBCO0FBc0VJQyxnQkFBYyxFQUFFLENBdEVwQjtBQXVFSUMsY0FBWSxFQUFFLEVBdkVsQjtBQXdFSTBFLFdBQVMsRUFBRSxDQXhFZjtBQXlFSUMsV0FBUyxFQUFFLENBekVmLENBeUVrQjs7QUF6RWxCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQXpHLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k7QUFDQXlHLFlBQVUsRUFBRSxPQUZoQjtBQUdJQyxzQkFBb0IsRUFBRSxpQkFIMUI7QUFJSUMseUJBQXVCLEVBQUUsY0FKN0I7QUFLSUMsaUJBQWUsRUFBRSxjQUxyQjtBQU1JQyx3QkFBc0IsRUFBRSxtQkFONUI7QUFPSUMsMEJBQXdCLEVBQUUsY0FQOUI7QUFRSUMsaUJBQWUsRUFBRSxRQVJyQjtBQVNJQyx5QkFBdUIsRUFBRSxpQkFUN0I7QUFVSUMsaUJBQWUsRUFBRSxTQVZyQjtBQVdJdkMsZUFBYSxFQUFFLGlCQVhuQjtBQVlJd0MsY0FBWSxFQUFFLGdCQVpsQjtBQWFJQyxtQkFBaUIsRUFBRSxpQkFidkI7QUFjSUMsbUJBQWlCLEVBQUUsZUFkdkI7QUFlSUMsYUFBVyxFQUFFLHlCQWZqQjtBQWdCSUMsY0FBWSxFQUFFLE9BaEJsQjtBQWlCSUMsNkJBQTJCLEVBQUUsMEJBakJqQztBQWlCNEQ7QUFDeERDLGlCQUFlLEVBQUUsVUFsQnJCO0FBbUJJQyx1QkFBcUIsRUFBRSxvQkFuQjNCO0FBb0JJQyxnQkFBYyxFQUFFLFNBcEJwQjtBQXFCSUMsa0JBQWdCLEVBQUUscUJBckJ0QjtBQXNCSUMsaUJBQWUsRUFBRSxVQXRCckI7QUF1QklDLG1CQUFpQixFQUFFLFlBdkJ2QjtBQXdCSTtBQUNBQyxNQUFJLEVBQUU7QUFBRTlDLGFBQVMsRUFBRSxFQUFiO0FBQWlCQyxZQUFRLEVBQUU7QUFBM0IsR0F6QlY7QUEwQkk4QyxPQUFLLEVBQUU7QUFBRS9DLGFBQVMsRUFBRSxHQUFiO0FBQWtCQyxZQUFRLEVBQUU7QUFBNUIsR0ExQlg7QUEyQkluQyxVQUFRLEVBQUU7QUFBRUMsYUFBUyxFQUFFLENBQWI7QUFBZ0JpQyxhQUFTLEVBQUMsRUFBMUI7QUFBOEJDLFlBQVEsRUFBRTtBQUF4QyxHQTNCZDtBQTJCOEQ7QUFDMUQrQyxhQUFXLEVBQUU7QUFBRWpGLGFBQVMsRUFBRSxDQUFiO0FBQWdCaUMsYUFBUyxFQUFDO0FBQTFCLEdBNUJqQjtBQTZCSWlELGVBQWEsRUFBRTtBQUFFakQsYUFBUyxFQUFFO0FBQWIsR0E3Qm5CO0FBOEJJa0QsT0FBSyxFQUFFO0FBQUVDLFNBQUssRUFBRSxNQUFUO0FBQWlCbEQsWUFBUSxFQUFFO0FBQTNCLEdBOUJYO0FBK0JJVyxRQUFNLEVBQUU7QUFBRTdDLGFBQVMsRUFBRSxDQUFiO0FBQWdCa0MsWUFBUSxFQUFFO0FBQTFCLEdBL0JaO0FBZ0NJbUQsbUJBQWlCLEVBQUUsQ0FBQyxHQWhDeEI7QUFpQ0lDLG1CQUFpQixFQUFFLEdBakN2QjtBQWtDSTtBQUNBckYsZUFBYSxFQUFHLGFBbkNwQjtBQW9DSUMsc0JBQW9CLEVBQUcsb0NBcEMzQjtBQXFDSXFGLDZCQUEyQixFQUFHO0FBckNsQyxDQURBLEM7Ozs7Ozs7Ozs7O0FDQUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUU7Ozs7Ozs7Ozs7O0FDdEJBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFOzs7Ozs7Ozs7OztBQ3RCQXZJLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0l1SSx5QkFBdUIsRUFBRyxrTEFEOUI7QUFFSUMsMkJBQXlCLEVBQUcsc0pBRmhDO0FBR0lDLDRCQUEwQixFQUFHLDZKQUhqQztBQUlJQyxtQ0FBaUMsRUFBRyw2REFKeEM7QUFLSUMsbUNBQWlDLEVBQUcsZ0VBTHhDO0FBTUlDLGdDQUE4QixFQUFHLHVGQU5yQztBQU9JQyw0QkFBMEIsRUFBRyxxRkFQakM7QUFRSUMsNEJBQTBCLEVBQUcsdUZBUmpDO0FBU0lDLDRCQUEwQixFQUFHLG1EQVRqQztBQVVJQyx5QkFBdUIsRUFBRyw2RUFWOUI7QUFXSUMsK0JBQTZCLEVBQUcsZ0ZBWHBDO0FBWUlDLCtCQUE2QixFQUFHLHVEQVpwQztBQWFJQywrQkFBNkIsRUFBRywrQ0FicEM7QUFjSUMsa0JBQWdCLEVBQUUsbUZBZHRCO0FBZUlDLHFCQUFtQixFQUFFLHFIQWZ6QjtBQWdCSUMsc0JBQW9CLEVBQUUsMEhBaEIxQjtBQWlCSUMsc0JBQW9CLEVBQUUsd0RBakIxQjtBQWtCSUMsb0JBQWtCLEVBQUcsZ0lBbEJ6QjtBQW1CSUMsc0JBQW9CLEVBQUcsZ0ZBbkIzQjtBQW9CSUMsV0FBUyxFQUFFLGdSQXBCZjtBQXFCSUMscUJBQW1CLEVBQUU7QUFyQnpCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQTVKLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k0SixXQUFTLEVBQUUsU0FEZjtBQUVJQyxjQUFZLEVBQUcsd0NBRm5CO0FBR0lDLGdCQUFjLEVBQUUsa0JBSHBCO0FBSUlDLFFBQU0sRUFBRywrQ0FKYjtBQUtJQyx3QkFBc0IsRUFBRyxZQUw3QjtBQU1JQyxzQkFBb0IsRUFBRSxpQkFOMUI7QUFPSUMscUJBQW1CLEVBQUUscUJBUHpCO0FBUUlDLGtCQUFnQixFQUFFLDhCQVJ0QjtBQVNJQyxjQUFZLEVBQUUsV0FUbEI7QUFVSUMsbUJBQWlCLEVBQUcsa0RBVnhCO0FBV0lDLGlCQUFlLEVBQUcsd0NBWHRCO0FBWUlDLFVBQVEsRUFBRyw0QkFaZjtBQWFJQyxjQUFZLEVBQUcscURBYm5CO0FBY0lDLGdCQUFjLEVBQUcsa0NBZHJCO0FBZUlDLFlBQVUsRUFBRywyQkFmakI7QUFnQklDLGVBQWEsRUFBRywyQ0FoQnBCO0FBaUJJQyxjQUFZLEVBQUcsc0RBakJuQjtBQWtCSUMsVUFBUSxFQUFHLGVBbEJmO0FBbUJJQyxZQUFVLEVBQUcsMkRBbkJqQjtBQW9CSUMsYUFBVyxFQUFHLGFBcEJsQjtBQXFCSUMsZ0JBQWMsRUFBRyxvQkFyQnJCO0FBc0JJQyxjQUFZLEVBQUcsaUJBdEJuQjtBQXVCSUMsYUFBVyxFQUFHLDRHQXZCbEI7QUF3QklDLGtCQUFnQixFQUFHLHdCQXhCdkI7QUF5QklDLGVBQWEsRUFBRyw0Q0F6QnBCO0FBMEJJQyxxQkFBbUIsRUFBRyxxTUExQjFCO0FBMkJJQyxtQkFBaUIsRUFBRyxtRUEzQnhCO0FBNEJJQyxrQkFBZ0IsRUFBRyx1RUE1QnZCO0FBNkJJQyxZQUFVLEVBQUcsbWhCQTdCakI7QUE4QklDLGtCQUFnQixFQUFFLGtCQTlCdEI7QUErQklDLGNBQVksRUFBRSxVQS9CbEI7QUFnQ0lDLGlCQUFlLEVBQUc7QUFoQ3RCLENBREEsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTtJQUVNQyxJOzs7Ozs7O1dBRUYsaUJBQWVDLEtBQWYsRUFDQTtBQUNJLFVBQUdBLEtBQUssS0FBR0MsU0FBUixJQUFxQkQsS0FBSyxLQUFHLElBQWhDLEVBQ0ksT0FBTyxJQUFQLENBREosS0FHQTtBQUNJQSxhQUFLLElBQUUsRUFBUCxDQURKLENBQ2M7O0FBQ1ZBLGFBQUssR0FBQ0EsS0FBSyxDQUFDRSxJQUFOLEVBQU47QUFDQSxZQUFHRixLQUFLLEtBQUcsRUFBWCxFQUNJLE9BQU8sSUFBUCxDQURKLEtBR0ksT0FBTyxLQUFQO0FBQ1A7QUFDSjs7O1dBRUQsdUJBQXFCRyxRQUFyQixFQUNBO0FBQ0ksVUFBR0osSUFBSSxDQUFDSyxPQUFMLENBQWFELFFBQWIsQ0FBSCxFQUNJQSxRQUFRLEdBQUMsSUFBVCxDQURKLEtBR0E7QUFDSUEsZ0JBQVEsSUFBRSxFQUFWLENBREosQ0FDaUI7O0FBQ2JBLGdCQUFRLEdBQUNBLFFBQVEsQ0FBQ0QsSUFBVCxFQUFUO0FBQ0g7QUFDRCxhQUFPQyxRQUFQO0FBQ0g7OztXQUdELDZCQUEyQkEsUUFBM0IsRUFBcUNFLEdBQXJDLEVBQ0E7QUFDSUYsY0FBUSxJQUFFLEVBQVYsQ0FESixDQUNpQjs7QUFDZCxVQUFHQSxRQUFRLENBQUNHLE1BQVQsR0FBa0JELEdBQXJCLEVBQ0tGLFFBQVEsR0FBQ0EsUUFBUSxDQUFDSSxTQUFULENBQW1CLENBQW5CLEVBQXVCRixHQUFHLEdBQUMsQ0FBM0IsSUFBK0IsR0FBeEM7QUFDSixhQUFPRixRQUFQO0FBQ0gsSyxDQUVEOzs7O1dBQ0Esb0JBQWtCQSxRQUFsQixFQUE0QkssTUFBNUIsRUFDQTtBQUNJLFVBQU1DLFdBQVcsR0FBRyxJQUFJQyxNQUFKLENBQVdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZSixNQUFaLEVBQW9CSyxJQUFwQixDQUF5QixHQUF6QixDQUFYLEVBQXlDLElBQXpDLENBQXBCO0FBQ0EsYUFBT1YsUUFBUSxDQUFDVyxPQUFULENBQWlCTCxXQUFqQixFQUE4QixVQUFDTSxPQUFELEVBQ3JDO0FBQ0ksZUFBT1AsTUFBTSxDQUFDTyxPQUFELENBQWI7QUFDSCxPQUhNLENBQVA7QUFJSCxLLENBRUQ7Ozs7V0FDQSxzQkFBb0JuSCxHQUFwQixFQUF5QnlHLEdBQXpCLEVBQ0E7QUFDSXpHLFNBQUcsR0FBR29ILElBQUksQ0FBQ0MsSUFBTCxDQUFVckgsR0FBVixDQUFOO0FBQ0F5RyxTQUFHLEdBQUdXLElBQUksQ0FBQ0UsS0FBTCxDQUFXYixHQUFYLENBQU47QUFDQSxhQUFPVyxJQUFJLENBQUNFLEtBQUwsQ0FBV0YsSUFBSSxDQUFDRyxNQUFMLE1BQWlCZCxHQUFHLEdBQUd6RyxHQUF2QixDQUFYLElBQTBDQSxHQUFqRDtBQUNILEssQ0FFRDs7OztXQUNBLG9CQUFrQndILFVBQWxCLEVBQ0E7QUFBQSxVQUQ4QkMsSUFDOUIsdUVBRG1DLElBQ25DO0FBQ0ksVUFBR3RCLElBQUksQ0FBQ0ssT0FBTCxDQUFhZ0IsVUFBYixDQUFILEVBQ0ksT0FBTyxFQUFQO0FBQ0osVUFBSUUsTUFBTSxHQUFDLElBQUlDLElBQUosQ0FBU0gsVUFBVCxDQUFYO0FBQ0EsVUFBSUksS0FBSyxHQUFDRixNQUFNLENBQUNHLE9BQVAsS0FBaUIsRUFBM0I7QUFDQSxVQUFHRCxLQUFLLENBQUNsQixNQUFOLEtBQWUsQ0FBbEIsRUFDSWtCLEtBQUssR0FBQyxNQUFJQSxLQUFWO0FBQ0osVUFBSUUsUUFBUSxHQUFFSixNQUFNLENBQUNLLFFBQVAsS0FBa0IsQ0FBbkIsR0FBc0IsRUFBbkM7QUFDQSxVQUFHRCxRQUFRLENBQUNwQixNQUFULEtBQWtCLENBQXJCLEVBQ0lvQixRQUFRLEdBQUMsTUFBSUEsUUFBYjtBQUNKLFVBQUlFLE1BQU0sR0FBQ04sTUFBTSxDQUFDTyxXQUFQLEVBQVg7QUFDQSxVQUFHUixJQUFJLEtBQUcsSUFBVixFQUNJLE9BQU9HLEtBQUssR0FBQyxHQUFOLEdBQVVFLFFBQVYsR0FBbUIsR0FBbkIsR0FBdUJFLE1BQTlCLENBREosS0FFSyxJQUFJUCxJQUFJLEtBQUcsTUFBWCxFQUFrQjtBQUNuQixlQUFPTyxNQUFNLEdBQUMsR0FBUCxHQUFXRixRQUFYLEdBQW9CLEdBQXBCLEdBQXdCRixLQUEvQixDQURDLEtBR0QsT0FBT0UsUUFBUSxHQUFDLEdBQVQsR0FBYUYsS0FBYixHQUFtQixHQUFuQixHQUF1QkksTUFBOUI7QUFDUCxLLENBRUQ7QUFDQTs7OztXQUNBLHFCQUFvQkUsUUFBcEIsRUFBOEJDLFFBQTlCLEVBQ0E7QUFDSSxVQUFNQyxLQUFLLEdBQUNGLFFBQVEsR0FBQ2QsSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxNQUFlWSxRQUFRLEdBQUNELFFBQXhCLENBQVgsQ0FBckI7QUFDQSxVQUFNRyxPQUFPLEdBQUMsb0RBQWQ7QUFDQSxVQUFNQyxNQUFNLEdBQUMsOEJBQWI7QUFDQSxVQUFJakwsUUFBUSxHQUFDZ0wsT0FBTyxDQUFDakIsSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxLQUFjYyxPQUFPLENBQUMzQixNQUFqQyxDQUFELENBQXBCOztBQUNBLFdBQUksSUFBSTZCLENBQUMsR0FBQyxDQUFWLEVBQVlBLENBQUMsR0FBRUgsS0FBSyxHQUFDLENBQXJCLEVBQXdCRyxDQUFDLEVBQXpCLEVBQ0E7QUFDSSxZQUFJQSxDQUFDLEdBQUcsQ0FBTCxLQUFXLENBQWQsRUFDSWxMLFFBQVEsSUFBRWlMLE1BQU0sQ0FBQ2xCLElBQUksQ0FBQ0UsS0FBTCxDQUFXRixJQUFJLENBQUNHLE1BQUwsS0FBY2UsTUFBTSxDQUFDNUIsTUFBaEMsQ0FBRCxDQUFoQixDQURKLEtBR0lySixRQUFRLElBQUVnTCxPQUFPLENBQUNqQixJQUFJLENBQUNFLEtBQUwsQ0FBV0YsSUFBSSxDQUFDRyxNQUFMLEtBQWNjLE9BQU8sQ0FBQzNCLE1BQWpDLENBQUQsQ0FBakI7QUFDUDs7QUFDRHJKLGNBQVEsSUFBRWdMLE9BQU8sQ0FBQ2pCLElBQUksQ0FBQ0UsS0FBTCxDQUFXRixJQUFJLENBQUNHLE1BQUwsS0FBY2MsT0FBTyxDQUFDM0IsTUFBakMsQ0FBRCxDQUFqQjtBQUNBLGFBQU9ySixRQUFQO0FBQ0g7Ozs7OztBQUdML0MsTUFBTSxDQUFDQyxPQUFQLEdBQWlCNEwsSUFBakIsQzs7Ozs7Ozs7Ozs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4RDs7Ozs7Ozs7Ozs7QUN2QkE3TCxNQUFNLENBQUNDLE9BQVAsR0FDQTtBQUNJaU8sV0FBUyxFQUNULENBQ0k7QUFBRUMsVUFBTSxFQUFFLFNBQVY7QUFBcUJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUFqQyxHQURKLEVBRUk7QUFBRUYsVUFBTSxFQUFFLFlBQVY7QUFBd0JDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsaUJBQVA7QUFBMEJDLFFBQUUsRUFBRTtBQUE5QjtBQUFwQyxHQUZKLEVBR0k7QUFBRUgsVUFBTSxFQUFFLFVBQVY7QUFBc0JDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUFsQyxHQUhKLEVBSUk7QUFBRUYsVUFBTSxFQUFFLFNBQVY7QUFBcUJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUFqQyxHQUpKLENBRko7QUFRSUUsV0FBUyxFQUNULENBQ0k7QUFBRUosVUFBTSxFQUFFLFNBQVY7QUFBcUJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUFqQyxHQURKLEVBRUk7QUFBRUYsVUFBTSxFQUFFLGtCQUFWO0FBQThCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLHdCQUFQO0FBQWlDRyxTQUFHLEVBQUU7QUFBdEM7QUFBMUMsR0FGSixFQUdJO0FBQUVMLFVBQU0sRUFBRSxzQkFBVjtBQUFrQ0MsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQztBQUFQO0FBQTlDLEdBSEosRUFJSTtBQUFFRixVQUFNLEVBQUUsUUFBVjtBQUFvQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxXQUFQO0FBQW9CRyxTQUFHLEVBQUU7QUFBekI7QUFBaEMsR0FKSixFQUtJO0FBQUVMLFVBQU0sRUFBRSxRQUFWO0FBQW9CQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLFdBQVA7QUFBb0JHLFNBQUcsRUFBRTtBQUF6QjtBQUFoQyxHQUxKLENBVEo7QUFnQklDLHlCQUF1QixFQUFFLEVBaEI3QjtBQWlCSUMsY0FBWSxFQUFHLGNBakJuQjtBQWtCSUMsZUFBYSxFQUFHLFlBbEJwQjtBQW1CSUMsaUJBQWUsRUFBRyxjQW5CdEI7QUFvQklDLGVBQWEsRUFBRyxrQkFwQnBCO0FBcUJJQyxnQkFBYyxFQUFHLGdCQXJCckI7QUFzQklDLGFBQVcsRUFBRSxhQXRCakI7QUF1QklDLDhCQUE0QixFQUFFLG9CQXZCbEM7QUF3QklDLHFCQUFtQixFQUFFLDJCQXhCekI7QUF5QklDLDhCQUE0QixFQUFHLEVBekJuQztBQTBCSUMsaUJBQWUsRUFBRyxhQTFCdEI7QUEyQklDLFlBQVUsRUFBRSwwQkEzQmhCO0FBNEJJQyxZQUFVLEVBQUUsc0JBNUJoQjtBQTZCSUMsUUFBTSxFQUFFLGtTQTdCWjtBQThCSUMsWUFBVSxFQUFFLHVCQTlCaEI7QUErQklDLFFBQU0sRUFBRSwrY0EvQlo7QUFnQ0lDLHdCQUFzQixFQUFFLDBDQWhDNUI7QUFpQ0lDLHdCQUFzQixFQUFFLGlEQWpDNUI7QUFrQ0lDLGtCQUFnQixFQUFFLDRCQWxDdEI7QUFtQ0lDLGdCQUFjLEVBQUUsMmlDQW5DcEI7QUFvQ0lDLGtCQUFnQixFQUFFLCtGQXBDdEI7QUFxQ0lDLGFBQVcsRUFBRTtBQXJDakIsQ0FEQSxDOzs7Ozs7Ozs7OztBQ0FBOVAsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTtBQUNBaU8sV0FBUyxFQUNULENBQ0k7QUFBRUMsVUFBTSxFQUFFLFNBQVY7QUFBcUJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsZUFBUDtBQUF3QkcsU0FBRyxFQUFFO0FBQTdCO0FBQWpDLEdBREosRUFFSTtBQUFFTCxVQUFNLEVBQUUsV0FBVjtBQUF1QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxTQUFQO0FBQWtCQyxRQUFFLEVBQUMsZUFBckI7QUFBc0N0SixXQUFLLEVBQUM7QUFBNUM7QUFBbkMsR0FGSixFQUdJO0FBQUVtSixVQUFNLEVBQUUsWUFBVjtBQUF3QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxpQkFBUDtBQUEwQkMsUUFBRSxFQUFFLGlCQUE5QjtBQUFpRHRKLFdBQUssRUFBQztBQUF2RDtBQUFwQyxHQUhKLEVBSUk7QUFBRW1KLFVBQU0sRUFBRSxVQUFWO0FBQXNCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGdCQUFQO0FBQXlCckosV0FBSyxFQUFDO0FBQS9CO0FBQWxDLEdBSkosRUFLSTtBQUFFbUosVUFBTSxFQUFFLFNBQVY7QUFBcUJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsR0FBUDtBQUFZckosV0FBSyxFQUFDO0FBQWxCO0FBQWpDLEdBTEosQ0FISjtBQVVJdUosV0FBUyxFQUNULENBQ0k7QUFBRUosVUFBTSxFQUFFLE1BQVY7QUFBa0JDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsaUVBQVA7QUFBMEVySixXQUFLLEVBQUM7QUFBaEY7QUFBOUIsR0FESixFQUVJO0FBQUVtSixVQUFNLEVBQUUsU0FBVjtBQUFxQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCckosV0FBSyxFQUFDO0FBQTlCO0FBQWpDLEdBRkosRUFHSTtBQUFFbUosVUFBTSxFQUFFLGtCQUFWO0FBQThCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLHdCQUFQO0FBQWlDRyxTQUFHLEVBQUU7QUFBdEM7QUFBMUMsR0FISixFQUlJO0FBQUVMLFVBQU0sRUFBRSxzQkFBVjtBQUFrQ0MsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCckosV0FBSyxFQUFDO0FBQTlCO0FBQTlDLEdBSkosRUFLSTtBQUFFbUosVUFBTSxFQUFFLFdBQVY7QUFBdUJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsZUFBUDtBQUF3QkcsU0FBRyxFQUFFO0FBQTdCO0FBQW5DLEdBTEosQ0FYSjtBQWtCSU8sYUFBVyxFQUFFLGFBbEJqQjtBQW1CSWdCLFdBQVMsRUFBRSxlQW5CZjtBQW9CSXBCLGVBQWEsRUFBRSxZQXBCbkI7QUFxQklxQixTQUFPLEVBQUUsY0FyQmI7QUFzQklsQixnQkFBYyxFQUFHLGdCQXRCckI7QUF1QkltQixnQkFBYyxFQUFHLGtCQXZCckI7QUF3QklDLGVBQWEsRUFBRyxlQXhCcEI7QUF5Qkl0QixpQkFBZSxFQUFHLGNBekJ0QjtBQTBCSXVCLGtCQUFnQixFQUFHLGtCQTFCdkI7QUEyQkluQiw4QkFBNEIsRUFBRSxvQkEzQmxDO0FBNEJJb0IsY0FBWSxFQUFHLG1CQTVCbkI7QUE2Qkl2QixlQUFhLEVBQUcsa0JBN0JwQjtBQThCSXdCLG1CQUFpQixFQUFFLGFBOUJ2QjtBQStCSTNCLGNBQVksRUFBRyxjQS9CbkI7QUFnQ0k0QixpQkFBZSxFQUFHLG9CQWhDdEI7QUFpQ0lyQixxQkFBbUIsRUFBRSwyQkFqQ3pCO0FBa0NJc0Isb0JBQWtCLEVBQUcsb0JBbEN6Qjs7QUFtQ0k7QUFDQW5CLFlBQVUsRUFBRSwwQkFwQ2hCO0FBcUNJUyxrQkFBZ0IsRUFBRSwrRkFyQ3RCO0FBc0NJVyxrQkFBZ0IsRUFBRSxvQkF0Q3RCO0FBdUNJQyxZQUFVLEVBQUUsdVNBdkNoQjs7QUF3Q0k7QUFDQUMsYUFBVyxFQUFFLGdCQXpDakI7QUEwQ0lyQixZQUFVLEVBQUUsc0JBMUNoQjtBQTJDSUMsUUFBTSxFQUFFLGtUQTNDWjtBQTRDSUMsWUFBVSxFQUFFLGdDQTVDaEI7QUE2Q0lDLFFBQU0sRUFBRSxzYUE3Q1o7QUE4Q0ltQixpQkFBZSxFQUFFLGdDQTlDckI7QUErQ0lDLHFCQUFtQixFQUFHLGtCQS9DMUI7QUFnRElDLDBCQUF3QixFQUFHLDBDQWhEL0I7O0FBaURJO0FBQ0FwQix3QkFBc0IsRUFBRSxnRUFsRDVCO0FBbURJQyx3QkFBc0IsRUFBRSxzRkFuRDVCO0FBb0RJb0IsZUFBYSxFQUFFLDBOQXBEbkI7O0FBcURJO0FBQ0FDLGNBQVksRUFBRSxtRUF0RGxCO0FBdURJQyxpQkFBZSxFQUFFLG1GQXZEckI7QUF3RElDLGNBQVksRUFBRSx1S0F4RGxCOztBQXlESTtBQUNBQyw2QkFBMkIsRUFBRSxRQTFEakM7QUEyRElDLHVCQUFxQixFQUFFLGdCQTNEM0I7QUE0RElDLGlDQUErQixFQUFFLDBDQTVEckM7QUE2REl6QixrQkFBZ0IsRUFBRSw0QkE3RHRCO0FBOERJQyxnQkFBYyxFQUFFLDZ2QkE5RHBCO0FBK0RJeUIsdUJBQXFCLEVBQUUsdWtCQS9EM0I7O0FBZ0VJO0FBQ0FsQyxpQkFBZSxFQUFHLGFBakV0QjtBQWtFSW1DLGdCQUFjLEVBQUUsV0FsRXBCO0FBbUVJN0MseUJBQXVCLEVBQUUsRUFuRTdCO0FBb0VJOEMsK0JBQTZCLEVBQUUsQ0FwRW5DO0FBcUVJckMsOEJBQTRCLEVBQUc7QUFyRW5DLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQTtBQUVBbFAsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSUMsUUFBTSxFQUFHLDJCQURiO0FBRUlzUixtQkFBaUIsRUFBRyxpQkFGeEI7QUFHSXJFLE1BQUksRUFBRyxJQUhYO0FBSUl1QixjQUFZLEVBQUcsY0FKbkI7QUFLSUMsZUFBYSxFQUFHLFlBTHBCO0FBTUlDLGlCQUFlLEVBQUcsY0FOdEI7QUFPSUMsZUFBYSxFQUFHLGtCQVBwQjtBQVFJQyxnQkFBYyxFQUFHLGdCQVJyQjtBQVNJQyxhQUFXLEVBQUUsYUFUakI7QUFVSUMsOEJBQTRCLEVBQUUsb0JBVmxDO0FBV0lDLHFCQUFtQixFQUFFLDJCQVh6QjtBQVlJQyw4QkFBNEIsRUFBRyxFQVpuQztBQWFJQyxpQkFBZSxFQUFHO0FBYnRCLENBREEsQzs7Ozs7Ozs7Ozs7O0FDRkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0EsTUFBTWhDLElBQUksR0FBQ3pNLGtFQUFjLENBQUMsQ0FBRCxDQUF6QjtBQUNBOztBQUNBLE1BQU0rUSxjQUFjLEdBQUczUiwrREFBUSxJQUFjLEdBQUNXLHlEQUFmLEdBQXFCLFVBQXJCLEdBQWdDME0sSUFBaEMsR0FBcUMsS0FBdEMsQ0FBOUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Q0FHQTs7QUFDQSxNQUFNO0FBQUU5RCxrQkFBRjtBQUFvQkMscUJBQXBCO0FBQXlDQyxzQkFBekM7QUFBK0RDLHNCQUEvRDtBQUFxRkMsb0JBQXJGO0FBQXlHRztBQUF6RyxJQUFpSTlKLGtFQUFRLElBQWEsR0FBQ3FOLElBQWQsR0FBbUIsU0FBcEIsQ0FBOUk7O0FBQ0EsTUFBTTtBQUFFaEM7QUFBRixJQUFrQnJMLG1FQUFRLElBQWEsR0FBQ3FOLElBQWQsR0FBbUIsVUFBcEIsQ0FBL0IsQyxDQUVBOzs7QUFDQSxNQUFNdUUsU0FBUyxHQUFHQyxRQUFRLENBQUNDLGNBQVQsQ0FBd0IsZ0JBQXhCLENBQWxCO0FBQ0EsTUFBTUMsV0FBVyxHQUFHRixRQUFRLENBQUNDLGNBQVQsQ0FBd0IsVUFBeEIsQ0FBcEI7QUFDQSxNQUFNRSxpQkFBaUIsR0FBR0gsUUFBUSxDQUFDQyxjQUFULENBQXdCLG1CQUF4QixDQUExQjtBQUNBLE1BQU1HLG1CQUFtQixHQUFHSixRQUFRLENBQUNDLGNBQVQsQ0FBd0IscUJBQXhCLENBQTVCO0FBQ0EsTUFBTUksTUFBTSxHQUFHTCxRQUFRLENBQUNDLGNBQVQsQ0FBd0IsT0FBeEIsQ0FBZixDLENBRUE7O0FBQ0EsSUFBSUssV0FBVyxHQUFDLENBQWhCOztBQUNBLE1BQU1DLFdBQVcsR0FBRyxNQUNwQjtBQUNJRCxhQUFXLEdBQUM1RSxJQUFJLENBQUM4RSxHQUFMLEVBQVo7QUFDQVQsV0FBUyxDQUFDVSxLQUFWLENBQWdCQyxPQUFoQixHQUF3QixPQUF4QjtBQUNILENBSkQ7O0FBTUEsSUFBSUMsV0FBSixFQUFpQkMsSUFBakI7O0FBQ0EsTUFBTUMsVUFBVSxHQUFHLFlBQ25CO0FBQ0ksTUFDQTtBQUNJO0FBQ0FOLGVBQVc7QUFDWEksZUFBVyxHQUFDLE1BQU1HLG9FQUFZLENBQUMsQ0FBQyxNQUFELENBQUQsQ0FBOUIsQ0FISixDQUc2QztBQUN6Qzs7QUFDQSxRQUFHSCxXQUFILEVBQ0E7QUFDSUMsVUFBSSxHQUFDRyx5RUFBUyxDQUFDLE1BQUQsRUFBUyxJQUFULENBQWQ7QUFDQUMsb0ZBQWlCLENBQUNKLElBQUksQ0FBQ0ssTUFBTixFQUFjbkIsY0FBZCxDQUFqQixDQUZKLENBRW1EOztBQUMvQ29CLDRCQUFzQixDQUFDTixJQUFELENBQXRCO0FBQ0gsS0FMRCxNQU9JTyxtRUFBVTtBQUNqQixHQWRELENBZUEsT0FBTUMsQ0FBTixFQUNBO0FBQ0lDLFdBQU8sQ0FBQ0MsS0FBUixDQUFjRixDQUFkO0FBQ0g7QUFDSixDQXJCRDs7QUFzQkFQLFVBQVU7QUFDVlUscUVBQVEsRyxDQUVSOztBQUNBLElBQUlDLE1BQU0sR0FBRyxFQUFiO0FBQ0FuQixNQUFNLENBQUNvQixnQkFBUCxDQUF3QixRQUF4QixFQUFrQyxVQUFTTCxDQUFULEVBQ2xDO0FBQ0ksTUFDQTtBQUNJQSxLQUFDLENBQUNNLGNBQUY7QUFDQTNCLGFBQVMsQ0FBQ1UsS0FBVixDQUFnQkMsT0FBaEIsR0FBd0IsTUFBeEIsQ0FGSixDQUVtQzs7QUFDL0JSLGVBQVcsQ0FBQ3lCLFNBQVosR0FBc0IsRUFBdEIsQ0FISixDQUc2Qjs7QUFDekIsVUFBTUMsYUFBYSxHQUFDQywwRUFBa0IsQ0FBQ3hCLE1BQUQsQ0FBdEM7QUFDQW1CLFVBQU0sQ0FBQ00sUUFBUCxHQUFnQjNHLElBQUksQ0FBQzRHLEtBQUwsQ0FBVyxDQUFDckcsSUFBSSxDQUFDOEUsR0FBTCxLQUFXRixXQUFaLElBQXlCLElBQXBDLENBQWhCO0FBQ0FrQixVQUFNLENBQUNRLFdBQVAsR0FBbUIsQ0FBbkI7QUFDQVIsVUFBTSxDQUFDUyxnQkFBUCxHQUF3QixDQUF4QjtBQUNBVCxVQUFNLENBQUNVLE9BQVAsR0FBZWxDLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixTQUF4QixFQUFtQ3hKLEtBQWxELENBUkosQ0FTSTtBQUNBOztBQUNBLFFBQUkwTCxRQUFKO0FBQUEsUUFBY0MsVUFBVSxHQUFDLEVBQXpCO0FBQUEsUUFBNkJDLFlBQVksR0FBQyxLQUExQzs7QUFDQSxTQUFJLElBQUlDLElBQVIsSUFBZ0JWLGFBQWhCLEVBQ0E7QUFDSSxVQUFHVSxJQUFJLENBQUNDLFVBQUwsQ0FBZ0IscUJBQWhCLENBQUgsRUFBMEM7QUFDMUM7QUFDSUosa0JBQVEsR0FBR0csSUFBSSxDQUFDNUgsU0FBTCxDQUFlNEgsSUFBSSxDQUFDRSxXQUFMLENBQWlCLEdBQWpCLElBQXdCLENBQXZDLENBQVg7O0FBQ0EsY0FBR1osYUFBYSxDQUFDLDBCQUF3Qk8sUUFBekIsQ0FBYixJQUFtREMsVUFBdEQsRUFBa0U7QUFDbEU7QUFDSUEsd0JBQVUsR0FBQ1IsYUFBYSxDQUFDLDBCQUF3Qk8sUUFBekIsQ0FBeEI7QUFDQVgsb0JBQU0sQ0FBQ1EsV0FBUDtBQUNBLGtCQUFHSyxZQUFILEVBQWlCO0FBQ2JiLHNCQUFNLENBQUNTLGdCQUFQO0FBQ0pJLDBCQUFZLEdBQUMsSUFBYixDQUxKLENBS3NCO0FBQ3JCOztBQUNELGNBQUdULGFBQWEsQ0FBQ1UsSUFBRCxDQUFiLElBQXVCLE1BQTFCLEVBQ0E7QUFDSXRDLG9CQUFRLENBQUNDLGNBQVQsQ0FBd0IsY0FBWWtDLFFBQXBDLEVBQThDTSxVQUE5QyxDQUF5REMsU0FBekQsQ0FBbUVDLEdBQW5FLENBQXVFLFdBQXZFO0FBQ0EsZ0JBQUdmLGFBQWEsQ0FBQyxjQUFZTyxRQUFiLENBQWIsS0FBd0MvSCxTQUEzQyxFQUFxRDtBQUNqRGlJLDBCQUFZLEdBQUMsS0FBYjtBQUNQLFdBTEQsTUFPQTtBQUNJLGdCQUFHVCxhQUFhLENBQUMsY0FBWU8sUUFBYixDQUFiLEtBQXdDLElBQTNDLEVBQ0E7QUFDSUUsMEJBQVksR0FBQyxLQUFiLENBREosQ0FDd0I7O0FBQ3BCckMsc0JBQVEsQ0FBQ0MsY0FBVCxDQUF3QixjQUFZa0MsUUFBcEMsRUFBOENNLFVBQTlDLENBQXlEQyxTQUF6RCxDQUFtRUMsR0FBbkUsQ0FBdUUsY0FBdkU7QUFDSDtBQUNKO0FBQ0o7QUFDSixLQXhDTCxDQXlDSTs7O0FBQ0EsUUFBR04sWUFBSCxFQUNJYixNQUFNLENBQUNTLGdCQUFQLEdBM0NSLENBNkNJOztBQUNBLFFBQUlXLFFBQVEsR0FBQ0MsMEVBQWdCLENBQUNyQixNQUFELENBQTdCOztBQUNBLFFBQUdiLFdBQUgsRUFDQTtBQUNJO0FBQ0EsWUFBTW1DLGFBQWEsR0FBRyxJQUFJQyxjQUFKLEVBQXRCO0FBQ0FELG1CQUFhLENBQUNFLElBQWQsQ0FBbUIsTUFBbkIsRUFBMkJ6VSwwREFBTSxHQUFDbUUscUVBQVAsR0FBbUJTLDBFQUE5Qzs7QUFDQTJQLG1CQUFhLENBQUNHLGtCQUFkLEdBQW1DLFlBQ25DO0FBQ0ksWUFBSSxLQUFLQyxVQUFMLElBQW1CSCxjQUFjLENBQUNJLElBQXRDLEVBQ0E7QUFDSSxjQUFJQyxXQUFXLEdBQUNDLElBQUksQ0FBQ0MsS0FBTCxDQUFXLEtBQUtDLFlBQWhCLENBQWhCOztBQUNBLGNBQUksS0FBS3RDLE1BQUwsS0FBZ0IsR0FBaEIsSUFBd0JtQyxXQUFXLENBQUNJLE9BQXhDLEVBQ0E7QUFDSVosb0JBQVEsSUFBRSxTQUFPUSxXQUFXLENBQUNJLE9BQVosQ0FBb0J2SSxPQUFwQixDQUE0QixNQUE1QixFQUFvQzZFLGNBQWMsQ0FBQy9DLFlBQW5ELENBQWpCO0FBQ0FtRSxrQ0FBc0IsQ0FBQ04sSUFBRCxDQUF0QjtBQUNILFdBSkQsTUFNSWdDLFFBQVEsSUFBRSxTQUFPOUssa0JBQWtCLENBQUNtRCxPQUFuQixDQUEyQixNQUEzQixFQUFtQzZFLGNBQWMsQ0FBQy9DLFlBQWxELENBQWpCLENBUlIsQ0FTSTs7O0FBQ0EwRyxnQkFBTSxDQUFDQyxRQUFQLENBQWdCQyxJQUFoQixHQUFxQixFQUFyQjtBQUNBLGdCQUFNQyxJQUFJLEdBQUNILE1BQU0sQ0FBQ0MsUUFBbEIsQ0FYSixDQVcrQjs7QUFDM0JELGdCQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLElBQWhCLEdBQXFCLGNBQXJCO0FBQ0g7QUFDSixPQWpCRDs7QUFrQkFiLG1CQUFhLENBQUNlLGdCQUFkLENBQStCLGVBQS9CLEVBQWdELFlBQVVqRCxJQUFJLENBQUNrRCxLQUEvRDtBQUNBaEIsbUJBQWEsQ0FBQ2UsZ0JBQWQsQ0FBK0IsY0FBL0IsRUFBK0Msa0JBQS9DO0FBQ0FyQyxZQUFNLENBQUN1QyxjQUFQLEdBQXNCQyx5RUFBaUIsRUFBdkMsQ0F4QkosQ0F3QjhDOztBQUMxQ2xCLG1CQUFhLENBQUNtQixJQUFkLENBQW1CWixJQUFJLENBQUNhLFNBQUwsQ0FBZTFDLE1BQWYsQ0FBbkI7QUFDSCxLQTNCRCxNQTZCQTtBQUFJO0FBQ0EsVUFBRzJDLG9FQUFVLENBQUMzQyxNQUFELENBQWIsRUFDQTtBQUNLb0IsZ0JBQVEsSUFBRSxZQUFVM0ssbUJBQVYsR0FBOEIsTUFBeEM7QUFDQW1NLHdFQUFVLENBQUNsRSxXQUFELEVBQWMsR0FBZCxFQUFtQjBDLFFBQW5CLEVBQTZCLEVBQTdCLEVBQWlDLENBQUMsU0FBRCxDQUFqQyxDQUFWO0FBQ0E1QyxnQkFBUSxDQUFDcUUsYUFBVCxDQUF1QixnQkFBdkIsRUFBeUM1RCxLQUF6QyxDQUErQ0MsT0FBL0MsR0FBdUQsT0FBdkQ7QUFDSixPQUxELE1BTUs7QUFDRDBELHdFQUFVLENBQUNsRSxXQUFELEVBQWMsR0FBZCxFQUFtQjBDLFFBQW5CLEVBQTZCLEVBQTdCLEVBQWlDLENBQUMsU0FBRCxDQUFqQyxDQUFWLENBUlIsQ0FTSTs7O0FBQ0FhLFlBQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsSUFBaEIsR0FBcUIsRUFBckI7QUFDQSxZQUFNQyxJQUFJLEdBQUNILE1BQU0sQ0FBQ0MsUUFBbEIsQ0FYSixDQVcrQjs7QUFDM0JELFlBQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsSUFBaEIsR0FBcUIsVUFBckI7QUFDSCxLQXpGTCxDQTBGSTs7O0FBQ0EsVUFBTVcsWUFBWSxHQUFDdEUsUUFBUSxDQUFDdUUsZ0JBQVQsQ0FBMEIsT0FBMUIsQ0FBbkI7O0FBQ0EsU0FBSSxJQUFJakksQ0FBUixJQUFhZ0ksWUFBYixFQUNJLElBQUdBLFlBQVksQ0FBQ2hJLENBQUQsQ0FBWixDQUFnQm1FLEtBQWhCLEtBQTBCckcsU0FBN0IsRUFBd0M7QUFDcENrSyxrQkFBWSxDQUFDaEksQ0FBRCxDQUFaLENBQWdCbUUsS0FBaEIsQ0FBc0JDLE9BQXRCLEdBQThCLE9BQTlCO0FBQ1gsR0FoR0QsQ0FpR0EsT0FBTVUsQ0FBTixFQUNBO0FBQ0lnRCxvRUFBVSxDQUFDbEUsV0FBRCxFQUFjLEdBQWQsRUFBbUIxRyxXQUFuQixFQUFnQyxFQUFoQyxFQUFvQyxDQUFDLE9BQUQsQ0FBcEMsQ0FBVjtBQUNBNkgsV0FBTyxDQUFDQyxLQUFSLENBQWNGLENBQWQ7QUFDSDtBQUNKLENBeEdELEUsQ0EwR0E7QUFDQTs7QUFDQSxNQUFNRixzQkFBc0IsR0FBSU4sSUFBRCxJQUMvQjtBQUNJLFFBQU00RCxjQUFjLEdBQUcsSUFBSXpCLGNBQUosRUFBdkI7QUFDQXlCLGdCQUFjLENBQUN4QixJQUFmLENBQW9CLEtBQXBCLEVBQTJCelUsMERBQU0sR0FBQ21FLHFFQUFQLEdBQW1CTyw0RUFBbkIsR0FBc0MyTixJQUFJLENBQUNqRSxFQUEzQyxHQUE4QyxHQUE5QyxHQUFrRHFELFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixTQUF4QixFQUFtQ3hKLEtBQWhIOztBQUNBK04sZ0JBQWMsQ0FBQ3ZCLGtCQUFmLEdBQW9DLFlBQ3BDO0FBQ0ksUUFBSSxLQUFLQyxVQUFMLElBQW1CSCxjQUFjLENBQUNJLElBQXRDLEVBQ0E7QUFDSSxVQUFJc0IsUUFBUSxHQUFDcEIsSUFBSSxDQUFDQyxLQUFMLENBQVcsS0FBS0MsWUFBaEIsQ0FBYjs7QUFDQSxVQUFJLEtBQUt0QyxNQUFMLEtBQWdCLEdBQXBCLEVBQ0E7QUFDSSxjQUFNeUQsV0FBVyxHQUFDRCxRQUFRLENBQUNoSyxNQUEzQjtBQUNBLFlBQUlrSyxzQkFBc0IsR0FBQyxFQUEzQjtBQUNBUCx3RUFBVSxDQUFDakUsaUJBQUQsRUFBb0IsTUFBcEIsRUFBNEJ0SSxvQkFBb0IsQ0FBQ29ELE9BQXJCLENBQTZCLE1BQTdCLEVBQXFDMkYsSUFBSSxDQUFDeEssSUFBMUMsQ0FBNUIsQ0FBVjs7QUFDQSxZQUFHc08sV0FBVyxLQUFHLENBQWpCLEVBQ0E7QUFDSSxjQUFJRSxjQUFjLEdBQUMsQ0FBbkI7QUFBQSxjQUFzQkMsbUJBQW1CLEdBQUMsQ0FBMUM7QUFBQSxjQUE2Q0MsV0FBVyxHQUFDLENBQXpEO0FBQUEsY0FBNERDLGNBQTVEOztBQUNBLGVBQUksSUFBSXpJLENBQVIsSUFBYW1JLFFBQWIsRUFDQTtBQUNJRywwQkFBYyxJQUFFSCxRQUFRLENBQUNuSSxDQUFELENBQVIsQ0FBWTBGLFdBQTVCLENBREosQ0FDNEM7O0FBQ3hDNkMsK0JBQW1CLElBQUVKLFFBQVEsQ0FBQ25JLENBQUQsQ0FBUixDQUFZMkYsZ0JBQWpDO0FBQ0E2Qyx1QkFBVyxJQUFFTCxRQUFRLENBQUNuSSxDQUFELENBQVIsQ0FBWXdGLFFBQXpCO0FBQ0FpRCwwQkFBYyxHQUNkO0FBQ0lDLHdCQUFVLEVBQUdDLDhEQUFVLENBQUNSLFFBQVEsQ0FBQ25JLENBQUQsQ0FBUixDQUFZNEksU0FBYixFQUF3QjFKLElBQXhCLENBRDNCO0FBRUkySiw4QkFBZ0IsRUFBR1YsUUFBUSxDQUFDbkksQ0FBRCxDQUFSLENBQVkyRixnQkFGbkM7QUFHSW1ELHlCQUFXLEVBQUdYLFFBQVEsQ0FBQ25JLENBQUQsQ0FBUixDQUFZMEYsV0FIOUI7QUFJSXFELHlCQUFXLEVBQUdaLFFBQVEsQ0FBQ25JLENBQUQsQ0FBUixDQUFZd0Y7QUFKOUIsYUFEQTtBQU9BNkMsa0NBQXNCLElBQUUsU0FBT1csOERBQVUsQ0FBQzNOLG1CQUFELEVBQXNCb04sY0FBdEIsQ0FBakIsR0FBdUQsT0FBL0U7QUFDSDs7QUFDREEsd0JBQWMsR0FDZDtBQUNJTSx1QkFBVyxFQUFHbEssSUFBSSxDQUFDNEcsS0FBTCxDQUFXK0MsV0FBVyxHQUFDSixXQUF2QixDQURsQjtBQUVJYSw2QkFBaUIsRUFBR3BLLElBQUksQ0FBQzRHLEtBQUwsQ0FBVzhDLG1CQUFtQixHQUFDRCxjQUFwQixHQUFtQyxHQUE5QztBQUZ4QixXQURBO0FBS0FELGdDQUFzQixHQUFDLFNBQU9XLDhEQUFVLENBQUMxTixvQkFBRCxFQUF1Qm1OLGNBQXZCLENBQWpCLEdBQXdELE9BQXhELEdBQWdFSixzQkFBdkY7QUFDQVAsMEVBQVUsQ0FBQ2hFLG1CQUFELEVBQXNCLElBQXRCLEVBQTRCdUUsc0JBQTVCLENBQVY7QUFDSCxTQXhCRCxNQTBCSVAsZ0VBQVUsQ0FBQ2hFLG1CQUFELEVBQXNCLElBQXRCLEVBQTRCMUksZ0JBQTVCLENBQVYsQ0E5QlIsQ0ErQkk7OztBQUNBME0sd0VBQVUsQ0FBQ2hFLG1CQUFELEVBQXNCLEdBQXRCLEVBQTJCLGdCQUFjTixjQUFjLENBQUMvQyxZQUE3QixHQUEwQyxnQ0FBMUMsR0FBMkUrQyxjQUFjLENBQUNuQixlQUExRixHQUEwRyxNQUFySSxFQUE2SSxFQUE3SSxFQUFpSixDQUFDLEtBQUQsQ0FBakosRUFBMEosRUFBMUosRUFBOEosS0FBOUosQ0FBVjtBQUNIO0FBQ0o7QUFDSixHQXpDRDs7QUEwQ0E2RixnQkFBYyxDQUFDWCxnQkFBZixDQUFnQyxlQUFoQyxFQUFpRCxZQUFVakQsSUFBSSxDQUFDa0QsS0FBaEU7QUFDQVUsZ0JBQWMsQ0FBQ1AsSUFBZjtBQUNILENBaERELEM7Ozs7Ozs7Ozs7OztBQ2pMQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUFNdUIsY0FBYyxHQUFHclgsbUJBQU8sQ0FBQyxrREFBRCxDQUE5Qjs7QUFFQTtBQUNBOztBQUVBLE1BQU1zWCxHQUFHLEdBQUd0WCxrRUFBUSxJQUFnQixHQUFDcVgsY0FBYyxDQUFDaEssSUFBaEMsR0FBcUMsU0FBdEMsQ0FBbkIsQyxDQUVBOzs7QUFDTyxNQUFNMkksVUFBVSxHQUFJM0MsTUFBRCxJQUMxQjtBQUNJLE1BQUcsQ0FBQ2pILDJEQUFPLENBQUNpSCxNQUFNLENBQUNNLFFBQVIsQ0FBUixJQUE2QixDQUFDdkgsMkRBQU8sQ0FBQ2lILE1BQU0sQ0FBQ1MsZ0JBQVIsQ0FBckMsSUFBa0UsQ0FBQzFILDJEQUFPLENBQUNpSCxNQUFNLENBQUNRLFdBQVIsQ0FBMUUsS0FBbUcsQ0FBQ3pILDJEQUFPLENBQUNpSCxNQUFNLENBQUNrRSxlQUFSLENBQVIsSUFBb0MsQ0FBQ25MLDJEQUFPLENBQUNpSCxNQUFNLENBQUNVLE9BQVIsQ0FBL0ksQ0FBSCxFQUNBO0FBQ0l5RCx3RUFBVSxDQUFDLFlBQUQsRUFBZW5FLE1BQWYsQ0FBVjtBQUNBLFdBQU8sSUFBUDtBQUNILEdBSkQsTUFNSSxPQUFPLEtBQVA7QUFDUCxDQVRNLEMsQ0FXUDs7QUFDTyxNQUFNcUIsZ0JBQWdCLEdBQUlyQixNQUFELElBQ2hDO0FBQ0ksTUFBRyxDQUFDakgsMkRBQU8sQ0FBQ2lILE1BQU0sQ0FBQ00sUUFBUixDQUFSLElBQTZCLENBQUN2SCwyREFBTyxDQUFDaUgsTUFBTSxDQUFDUyxnQkFBUixDQUFyQyxJQUFrRSxDQUFDMUgsMkRBQU8sQ0FBQ2lILE1BQU0sQ0FBQ1EsV0FBUixDQUE3RSxFQUNBO0FBQ0ksVUFBTTRELEtBQUssR0FBQ3BFLE1BQU0sQ0FBQ1MsZ0JBQVAsR0FBd0JULE1BQU0sQ0FBQ1EsV0FBM0M7QUFDQSxVQUFNckgsTUFBTSxHQUNaO0FBQ0lrTCxjQUFRLEVBQUVyRSxNQUFNLENBQUNNLFFBRHJCO0FBRUlxRCxzQkFBZ0IsRUFBRTNELE1BQU0sQ0FBQ1MsZ0JBRjdCO0FBR0ltRCxpQkFBVyxFQUFFNUQsTUFBTSxDQUFDUTtBQUh4QixLQURBO0FBTUEsUUFBSThELE1BQU0sR0FBQyxFQUFYO0FBQ0EsUUFBR0YsS0FBSyxHQUFHLEdBQVgsRUFDSUUsTUFBTSxHQUFDUiw4REFBVSxDQUFDRyxHQUFHLENBQUM1Tyx1QkFBTCxFQUE4QjhELE1BQTlCLENBQWpCLENBREosS0FFSyxJQUFHaUwsS0FBSyxHQUFHLEdBQVgsRUFDREUsTUFBTSxHQUFDUiw4REFBVSxDQUFDRyxHQUFHLENBQUMzTyx5QkFBTCxFQUFnQzZELE1BQWhDLENBQWpCLENBREMsS0FHRG1MLE1BQU0sR0FBQ1IsOERBQVUsQ0FBQ0csR0FBRyxDQUFDMU8sMEJBQUwsRUFBaUM0RCxNQUFqQyxDQUFqQjtBQUNKLFFBQUdtTCxNQUFILEVBQ0ksT0FBT0EsTUFBUCxDQURKLEtBR0ksT0FBTyxFQUFQO0FBQ1AsR0FwQkQsTUFzQkksT0FBTyxFQUFQO0FBQ1AsQ0F6Qk0sQzs7Ozs7Ozs7Ozs7O0FDcEJQO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVPLE1BQU1ILFVBQVUsR0FBRyxDQUFDdlAsSUFBRCxFQUFPMlAsSUFBUCxLQUMxQjtBQUNJQyxjQUFZLENBQUNDLE9BQWIsQ0FBcUI3UCxJQUFyQixFQUEyQmlOLElBQUksQ0FBQ2EsU0FBTCxDQUFlNkIsSUFBZixDQUEzQjtBQUNILENBSE07QUFLQSxNQUFNaEYsU0FBUyxHQUFHLENBQUMzSyxJQUFELEVBQU84UCxJQUFJLEdBQUMsS0FBWixLQUN6QjtBQUNJLE1BQUdBLElBQUgsRUFDSSxPQUFPN0MsSUFBSSxDQUFDQyxLQUFMLENBQVcwQyxZQUFZLENBQUNHLE9BQWIsQ0FBcUIvUCxJQUFyQixDQUFYLENBQVAsQ0FESixLQUdJLE9BQU80UCxZQUFZLENBQUNHLE9BQWIsQ0FBcUIvUCxJQUFyQixDQUFQO0FBQ1AsQ0FOTTtBQVFBLE1BQU1nUSxZQUFZLEdBQUloUSxJQUFELElBQzVCO0FBQ0k0UCxjQUFZLENBQUNLLFVBQWIsQ0FBd0JqUSxJQUF4QjtBQUNILENBSE0sQzs7Ozs7Ozs7Ozs7O0FDaEJQO0FBQUE7QUFBQTtBQUFBO0NBRUE7O0FBQ08sTUFBTWdPLFVBQVUsR0FBRyxDQUFDa0MsU0FBRCxFQUFZQyxPQUFaLEVBQXFCQyxVQUFVLEdBQUMsRUFBaEMsRUFBb0NDLEtBQUssR0FBQyxFQUExQyxFQUE4Q0MsUUFBUSxHQUFDLEVBQXZELEVBQTJEQyxhQUFhLEdBQUMsRUFBekUsRUFBNkUxTCxPQUFPLEdBQUMsSUFBckYsS0FDMUI7QUFDSSxNQUFHViwyREFBTyxDQUFDZ00sT0FBRCxDQUFQLElBQW9CaE0sMkRBQU8sQ0FBQytMLFNBQUQsQ0FBOUIsRUFDSSxPQUFPLEtBQVAsQ0FESixLQUdBO0FBQ0ksVUFBTU0sVUFBVSxHQUFDNUcsUUFBUSxDQUFDNkcsYUFBVCxDQUF1Qk4sT0FBdkIsQ0FBakI7QUFFQSxRQUFHLENBQUNoTSwyREFBTyxDQUFDa00sS0FBRCxDQUFYLEVBQW1CO0FBQ2ZHLGdCQUFVLENBQUNqSyxFQUFYLEdBQWM4SixLQUFkOztBQUVKLFFBQUdLLEtBQUssQ0FBQ0MsT0FBTixDQUFjTCxRQUFkLEtBQTJCQSxRQUFRLENBQUNqTSxNQUFULElBQWlCLENBQS9DLEVBQ0E7QUFDSSxXQUFJLElBQUk2QixDQUFSLElBQWFvSyxRQUFiLEVBQ0lFLFVBQVUsQ0FBQ2xFLFNBQVgsQ0FBcUJDLEdBQXJCLENBQXlCK0QsUUFBUSxDQUFDcEssQ0FBRCxDQUFqQztBQUNQOztBQUVELFFBQUcsT0FBT3FLLGFBQVAsS0FBeUIsUUFBNUIsRUFBc0M7QUFDdEM7QUFDSSxhQUFJLElBQUlLLFlBQVIsSUFBd0JMLGFBQXhCLEVBQ0lDLFVBQVUsQ0FBQ0ssWUFBWCxDQUF3QkQsWUFBeEIsRUFBc0NMLGFBQWEsQ0FBQ0ssWUFBRCxDQUFuRDtBQUNQOztBQUVELFFBQUcsQ0FBQ3pNLDJEQUFPLENBQUNpTSxVQUFELENBQVgsRUFDSUksVUFBVSxDQUFDakYsU0FBWCxHQUFxQjZFLFVBQVUsQ0FBQ3ZMLE9BQVgsQ0FBbUIsS0FBbkIsRUFBeUIsTUFBekIsQ0FBckIsQ0FuQlIsQ0FtQjhEOztBQUUxRCxRQUFHQSxPQUFILEVBQ0lxTCxTQUFTLENBQUMzRSxTQUFWLEdBQW9CLEVBQXBCO0FBQ0oyRSxhQUFTLENBQUNZLFdBQVYsQ0FBc0JOLFVBQXRCO0FBQ0g7QUFDSixDQTlCTSxDOzs7Ozs7Ozs7Ozs7QUNIUDtBQUFBO0FBQUE7QUFBQTtBQUVPLE1BQU1yRixRQUFRLEdBQUcsTUFDeEI7QUFDSUYsU0FBTyxDQUFDOEYsR0FBUixDQUFZLHlPQUFaO0FBQ0EsU0FBTyxJQUFQO0FBQ0gsQ0FKTTtBQU1BLE1BQU1uRyxpQkFBaUIsR0FBRyxDQUFDQyxNQUFELEVBQVNuQixjQUFULEtBQ2pDO0FBQ0ksUUFBTXNILElBQUksR0FBQ3BILFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixpQkFBeEIsQ0FBWDtBQUNBLFFBQU1vSCxRQUFRLEdBQUNwRyxNQUFNLEdBQUMsVUFBdEI7QUFDQW1HLE1BQUksQ0FBQzFLLElBQUwsR0FBVSxNQUFJb0QsY0FBYyxDQUFDdUgsUUFBRCxDQUE1QjtBQUNILENBTE0sQzs7Ozs7Ozs7Ozs7O0FDUlA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Q0FFQTs7QUFDTyxNQUFNQyxxQkFBcUIsR0FBRyxDQUFDQyxVQUFELEVBQWFsSCxNQUFiLEtBQ3JDO0FBQ0ksT0FBSSxJQUFJL0QsQ0FBUixJQUFhK0QsTUFBTSxDQUFDbUgsUUFBcEIsRUFDQTtBQUNJLFFBQUcsQ0FBQ2pOLDJEQUFPLENBQUM4RixNQUFNLENBQUNtSCxRQUFQLENBQWdCbEwsQ0FBaEIsRUFBbUJLLEVBQXBCLENBQVgsRUFDQTtBQUNJLFVBQUk4SyxPQUFPLEdBQUNwSCxNQUFNLENBQUNtSCxRQUFQLENBQWdCbEwsQ0FBaEIsRUFBbUJLLEVBQS9COztBQUNBLFVBQUc0SyxVQUFVLENBQUNFLE9BQUQsQ0FBVixLQUFzQnJOLFNBQXpCLEVBQ0E7QUFDSSxZQUFJc04sU0FBUyxHQUFDMUgsUUFBUSxDQUFDQyxjQUFULENBQXdCd0gsT0FBeEIsQ0FBZDs7QUFDQSxhQUFLLElBQUlFLFNBQVQsSUFBc0JKLFVBQVUsQ0FBQ0UsT0FBRCxDQUFoQyxFQUNJQyxTQUFTLENBQUNULFlBQVYsQ0FBdUJVLFNBQXZCLEVBQWtDSixVQUFVLENBQUNFLE9BQUQsQ0FBVixDQUFvQkUsU0FBcEIsQ0FBbEM7QUFDUDtBQUNKO0FBQ0o7O0FBQ0QsU0FBTyxJQUFQO0FBQ0gsQ0FoQk0sQyxDQWtCUDs7QUFDTyxNQUFNOUYsa0JBQWtCLEdBQUl4QixNQUFELElBQ2xDO0FBQ0ksUUFBTXVILEtBQUssR0FBQyxFQUFaO0FBQ0EsUUFBTUMsUUFBUSxHQUFHLElBQUlDLFFBQUosQ0FBYXpILE1BQWIsQ0FBakI7O0FBQ0EsT0FBSSxJQUFJMEgsTUFBUixJQUFrQkYsUUFBUSxDQUFDRyxPQUFULEVBQWxCLEVBQ0dKLEtBQUssQ0FBQ0csTUFBTSxDQUFDLENBQUQsQ0FBUCxDQUFMLEdBQWlCQSxNQUFNLENBQUMsQ0FBRCxDQUF2Qjs7QUFDSCxTQUFPSCxLQUFQO0FBQ0gsQ0FQTSxDLENBU1A7QUFDQTs7QUFDTyxNQUFNSyxRQUFRLEdBQUk1SCxNQUFELElBQ3hCO0FBQ0ksUUFBTXdILFFBQVEsR0FBRyxJQUFJQyxRQUFKLENBQWF6SCxNQUFiLENBQWpCOztBQUNBLE9BQUksSUFBSTBILE1BQVIsSUFBa0JGLFFBQVEsQ0FBQ0csT0FBVCxFQUFsQixFQUNBO0FBQ0ksUUFBRzNILE1BQU0sQ0FBQ21ILFFBQVAsQ0FBZ0JPLE1BQU0sQ0FBQyxDQUFELENBQXRCLEVBQTJCRyxJQUEzQixJQUFpQyxVQUFqQyxJQUErQzdILE1BQU0sQ0FBQ21ILFFBQVAsQ0FBZ0JPLE1BQU0sQ0FBQyxDQUFELENBQXRCLEVBQTJCRyxJQUEzQixJQUFpQyxPQUFuRixFQUNJN0gsTUFBTSxDQUFDbUgsUUFBUCxDQUFnQk8sTUFBTSxDQUFDLENBQUQsQ0FBdEIsRUFBMkJJLE9BQTNCLEdBQW1DLEtBQW5DLENBREosS0FHSTlILE1BQU0sQ0FBQ21ILFFBQVAsQ0FBZ0JPLE1BQU0sQ0FBQyxDQUFELENBQXRCLEVBQTJCdFIsS0FBM0IsR0FBaUMsRUFBakM7QUFDUDs7QUFDRCxTQUFPLElBQVA7QUFDSCxDQVhNLEMsQ0FZUDs7QUFDTyxNQUFNMlIsZUFBZSxHQUFJL0gsTUFBRCxJQUMvQjtBQUNJNEgsVUFBUSxDQUFDNUgsTUFBRCxDQUFSO0FBQ0FBLFFBQU0sQ0FBQ0ksS0FBUCxDQUFhQyxPQUFiLEdBQXFCLE1BQXJCO0FBQ0gsQ0FKTSxDOzs7Ozs7Ozs7Ozs7QUM5Q1A7QUFBQTtBQUFBO0FBQUE7Q0FFQTs7QUFDTyxNQUFNUyxVQUFVLEdBQUcsTUFDMUI7QUFDSTtBQUNBLE1BQUlrSCxJQUFJLEdBQUc1RSxNQUFNLENBQUM0RSxJQUFQLEdBQWM1RSxNQUFNLENBQUM0RSxJQUFQLElBQWUsRUFBeEMsQ0FGSixDQUdJOzs7QUFDQUEsTUFBSSxDQUFDQyxJQUFMLENBQVUsQ0FBQyxZQUNYO0FBQ0ksUUFBSUMsSUFBSSxHQUFHLElBQVg7O0FBQ0EsYUFBU0MsK0JBQVQsR0FDQTtBQUNJLFVBQUloSSxHQUFHLEdBQUcsSUFBSTlFLElBQUosRUFBVjtBQUFBLFVBQ0ErTSxLQUFLLEdBQUd0TixJQUFJLENBQUM0RyxLQUFMLENBQVd2QixHQUFHLENBQUNrSSxPQUFKLEtBQWdCLElBQTNCLENBRFI7QUFBQSxVQUVBQyxXQUFXLEdBQUdKLElBQUksQ0FBQ0ssY0FBTCxFQUZkO0FBR0EsVUFBSUMsUUFBUSxHQUFHQyxRQUFRLENBQUNILFdBQVcsQ0FBQyxDQUFELENBQVosQ0FBdkI7QUFDQSxVQUFJSSxhQUFhLEdBQUcsUUFBcEIsQ0FMSixDQUtrQzs7QUFDOUIsVUFBSUMsZUFBZSxHQUFHSCxRQUFRLEdBQUdFLGFBQVgsR0FBMkJOLEtBQWpEO0FBQ0EsYUFBT08sZUFBUDtBQUNIOztBQUNELFNBQUtDLHVCQUFMLENBQThCVCwrQkFBK0IsRUFBN0Q7QUFDSCxHQWRTLENBQVYsRUFKSixDQW1CSTs7O0FBQ0FILE1BQUksQ0FBQ0MsSUFBTCxDQUFVLENBQUMsZUFBRCxDQUFWOztBQUNBRCxNQUFJLENBQUNDLElBQUwsQ0FBVSxDQUFDLG9CQUFELENBQVY7O0FBQ0EsR0FBQyxZQUFXO0FBQ1IsUUFBSVksQ0FBQyxHQUFDclgsd0RBQU0sQ0FBQ0MsR0FBYjs7QUFDQXVXLFFBQUksQ0FBQ0MsSUFBTCxDQUFVLENBQUMsZUFBRCxFQUFrQlksQ0FBQyxHQUFDLFlBQXBCLENBQVY7O0FBQ0FiLFFBQUksQ0FBQ0MsSUFBTCxDQUFVLENBQUMsV0FBRCxFQUFjelcsd0RBQU0sQ0FBQ0UsTUFBckIsQ0FBVjs7QUFDQSxRQUFJb1gsQ0FBQyxHQUFDbkosUUFBTjtBQUFBLFFBQWdCb0osQ0FBQyxHQUFDRCxDQUFDLENBQUN0QyxhQUFGLENBQWdCLFFBQWhCLENBQWxCO0FBQUEsUUFBNkN3QyxDQUFDLEdBQUNGLENBQUMsQ0FBQ0csb0JBQUYsQ0FBdUIsUUFBdkIsRUFBaUMsQ0FBakMsQ0FBL0M7QUFDQUYsS0FBQyxDQUFDbEIsSUFBRixHQUFPLGlCQUFQO0FBQTBCa0IsS0FBQyxDQUFDRyxLQUFGLEdBQVEsSUFBUjtBQUFjSCxLQUFDLENBQUNJLEdBQUYsR0FBTU4sQ0FBQyxHQUFDLFdBQVI7QUFBcUJHLEtBQUMsQ0FBQzVHLFVBQUYsQ0FBYWdILFlBQWIsQ0FBMEJMLENBQTFCLEVBQTRCQyxDQUE1QjtBQUNoRSxHQU5EO0FBT0gsQ0E5Qk0sQzs7Ozs7Ozs7Ozs7O0FDSFA7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxNQUFNN04sSUFBSSxHQUFDek0sa0VBQWMsQ0FBQyxDQUFELENBQXpCOztBQUVBLE1BQU0rUSxjQUFjLEdBQUczUiwrREFBUSxJQUFpQixHQUFDVyx5REFBbEIsR0FBd0IsVUFBeEIsR0FBbUMwTSxJQUFuQyxHQUF3QyxLQUF6QyxDQUE5Qjs7QUFFQTtBQUVBO0FBQ0E7QUFFTyxNQUFNd0ksaUJBQWlCLEdBQUcsTUFDakM7QUFDSTtBQUNBLFFBQU0wRixTQUFTLEdBQUMsSUFBSWhPLElBQUosR0FBV2lPLGlCQUFYLEtBQStCLENBQUMsQ0FBaEQ7QUFDQSxNQUFHRCxTQUFTLEdBQUcvUyxrRUFBWixJQUFpQytTLFNBQVMsR0FBR2hULGtFQUFoRCxFQUNJLE9BQU8sQ0FBUCxDQURKLEtBR0ksT0FBT2dULFNBQVA7QUFDUCxDQVJNLEMsQ0FVUDtBQUNBOztBQUNPLE1BQU1FLFVBQVUsR0FBRyxDQUFDQyxNQUFELEVBQVMvRixLQUFULEVBQWdCZ0csVUFBaEIsS0FDMUI7QUFDSSxRQUFNQyxXQUFXLEdBQ2pCO0FBQ0lwTixNQUFFLEVBQUVrTixNQURSO0FBRUkvRixTQUFLLEVBQUVBLEtBRlg7QUFHSWhDLFlBQVEsRUFBRWdJO0FBSGQsR0FEQTtBQU1BbkUsc0VBQVUsQ0FBQyxNQUFELEVBQVNvRSxXQUFULENBQVY7QUFDSCxDQVRNLEMsQ0FXUDtBQUNBOztBQUNPLE1BQU1DLGdCQUFnQixHQUFJcEMsS0FBRCxJQUNoQztBQUNJLFFBQU1xQyxVQUFVLEdBQUNsSixtRUFBUyxDQUFDLFlBQUQsQ0FBMUI7O0FBQ0EsTUFBRyxDQUFDeEcsMkRBQU8sQ0FBQzBQLFVBQUQsQ0FBWCxFQUNBO0FBQ0ksVUFBTXpJLE1BQU0sR0FBQzZCLElBQUksQ0FBQ0MsS0FBTCxDQUFXMkcsVUFBWCxDQUFiOztBQUNBLFFBQUcsQ0FBQzFQLDJEQUFPLENBQUNpSCxNQUFNLENBQUNNLFFBQVIsQ0FBUixJQUE2QixDQUFDdkgsMkRBQU8sQ0FBQ2lILE1BQU0sQ0FBQ1MsZ0JBQVIsQ0FBckMsSUFBa0UsQ0FBQzFILDJEQUFPLENBQUNpSCxNQUFNLENBQUNRLFdBQVIsQ0FBMUUsS0FBbUcsQ0FBQ3pILDJEQUFPLENBQUNpSCxNQUFNLENBQUNrRSxlQUFSLENBQVIsSUFBb0MsQ0FBQ25MLDJEQUFPLENBQUNpSCxNQUFNLENBQUNVLE9BQVIsQ0FBL0ksQ0FBSCxFQUNBO0FBQ0kwRixXQUFLLENBQUM5RixRQUFOLEdBQWVOLE1BQU0sQ0FBQ00sUUFBdEI7QUFDQThGLFdBQUssQ0FBQzNGLGdCQUFOLEdBQXVCVCxNQUFNLENBQUNTLGdCQUE5QjtBQUNBMkYsV0FBSyxDQUFDNUYsV0FBTixHQUFrQlIsTUFBTSxDQUFDUSxXQUF6QjtBQUNBLFVBQUcsQ0FBQ3pILDJEQUFPLENBQUNpSCxNQUFNLENBQUNrRSxlQUFSLENBQVgsRUFDSWtDLEtBQUssQ0FBQ2xDLGVBQU4sR0FBc0JsRSxNQUFNLENBQUNrRSxlQUE3QixDQURKLEtBR0lrQyxLQUFLLENBQUMxRixPQUFOLEdBQWNWLE1BQU0sQ0FBQ1UsT0FBckI7QUFDUDtBQUNKOztBQUNELFNBQU8wRixLQUFQO0FBQ0gsQ0FsQk0sQyxDQW9CUDtBQUNBOztBQUNPLE1BQU05RyxZQUFZLEdBQUcsT0FBT0csTUFBTSxHQUFDLEVBQWQsRUFBa0JpSixjQUFsQixFQUFrQzFHLE9BQWxDLEVBQTJDMkcsU0FBM0MsS0FDNUI7QUFDSSxTQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDQyxPQUFELEVBQVVDLE1BQVYsS0FDbkI7QUFDSSxVQUFNQyxTQUFTLEdBQUN4SixtRUFBUyxDQUFDLE1BQUQsQ0FBekI7O0FBQ0EsUUFBR3hHLDJEQUFPLENBQUNnUSxTQUFELENBQVYsRUFDQTtBQUNJQyxrQkFBWSxDQUFDTixjQUFELEVBQWlCMUcsT0FBakIsRUFBMEIyRyxTQUExQixDQUFaO0FBQ0FFLGFBQU8sQ0FBQyxLQUFELENBQVA7QUFDSCxLQUpELE1BTUE7QUFDSSxZQUFNekosSUFBSSxHQUFDeUMsSUFBSSxDQUFDQyxLQUFMLENBQVdpSCxTQUFYLENBQVg7O0FBQ0EsVUFBR2hRLDJEQUFPLENBQUNxRyxJQUFJLENBQUNqRSxFQUFOLENBQVAsSUFBb0JwQywyREFBTyxDQUFDcUcsSUFBSSxDQUFDa0QsS0FBTixDQUEzQixJQUEyQ3ZKLDJEQUFPLENBQUNxRyxJQUFJLENBQUNrQixRQUFOLENBQWxELElBQXFFbEIsSUFBSSxDQUFDa0IsUUFBTCxHQUFnQnBHLElBQUksQ0FBQzhFLEdBQUwsRUFBeEYsRUFDQTtBQUNJNEYsOEVBQVksQ0FBQyxNQUFELENBQVo7QUFDQW9FLG9CQUFZLENBQUNOLGNBQUQsRUFBaUIxRyxPQUFqQixFQUEwQjJHLFNBQTFCLENBQVo7QUFDQUUsZUFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNILE9BTEQsTUFPQTtBQUNJLGNBQU1JLEdBQUcsR0FBRyxJQUFJMUgsY0FBSixFQUFaO0FBQ0EwSCxXQUFHLENBQUN6SCxJQUFKLENBQVMsS0FBVCxFQUFnQnpVLDBEQUFNLEdBQUN3RywyREFBUCxHQUFrQkcsZ0VBQWxCLEdBQWtDMEwsSUFBSSxDQUFDa0QsS0FBdkQ7O0FBQ0EyRyxXQUFHLENBQUNDLE1BQUosR0FBYSxNQUNiO0FBQ0ksY0FBSWpHLFFBQVEsR0FBQ3BCLElBQUksQ0FBQ0MsS0FBTCxDQUFXbUgsR0FBRyxDQUFDbEgsWUFBZixDQUFiOztBQUNBLGNBQUlrSCxHQUFHLENBQUN4SixNQUFKLEtBQWUsR0FBZixJQUFzQndELFFBQVEsQ0FBQ2tHLE9BQS9CLElBQTBDbEcsUUFBUSxDQUFDOUgsRUFBVCxJQUFldkMsU0FBN0QsRUFDQTtBQUNJLGdCQUFHcUssUUFBUSxDQUFDOUgsRUFBVCxLQUFjaUUsSUFBSSxDQUFDakUsRUFBdEIsRUFDQTtBQUNJaUUsa0JBQUksQ0FBQ3hLLElBQUwsR0FBVXFPLFFBQVEsQ0FBQ3JPLElBQW5CO0FBQ0F3SyxrQkFBSSxDQUFDZ0ssUUFBTCxHQUFjbkcsUUFBUSxDQUFDbUcsUUFBdkI7QUFDQWhLLGtCQUFJLENBQUNtRCxjQUFMLEdBQW9CVSxRQUFRLENBQUNWLGNBQTdCO0FBQ0FuRCxrQkFBSSxDQUFDSyxNQUFMLEdBQVl3RCxRQUFRLENBQUN4RCxNQUFyQixDQUpKLENBSWdDOztBQUM1QjBFLGtGQUFVLENBQUMsTUFBRCxFQUFTL0UsSUFBVCxDQUFWLENBTEosQ0FNSTs7QUFDQSxrQkFBRzZELFFBQVEsQ0FBQ3hELE1BQVQsS0FBa0IsTUFBbEIsSUFBNEJ3RCxRQUFRLENBQUNvRyxRQUFULElBQXFCLENBQXBELEVBQ0E7QUFDSSxzQkFBTUMsVUFBVSxHQUFDdGMsMkRBQU8sR0FBQyxHQUFSLEdBQVlzUixjQUFjLENBQUMxQyxXQUE1QztBQUNBLG9CQUFHcUcsTUFBTSxDQUFDQyxRQUFQLENBQWdCaEgsSUFBaEIsQ0FBcUJxTyxPQUFyQixDQUE2QkQsVUFBN0IsTUFBMkMsQ0FBQyxDQUEvQyxFQUNJckgsTUFBTSxDQUFDQyxRQUFQLENBQWdCc0gsTUFBaEIsQ0FBdUIsTUFBSWxMLGNBQWMsQ0FBQzFDLFdBQW5CLEdBQStCLFlBQXRELEVBSFIsQ0FHNEU7O0FBQ3hFaU4sdUJBQU8sQ0FBQyxJQUFELENBQVA7QUFDSCxlQU5ELE1BUUE7QUFDSSxvQkFBR3BKLE1BQU0sQ0FBQ3hHLE1BQVAsS0FBZ0IsQ0FBaEIsSUFBcUJ3RyxNQUFNLENBQUM4SixPQUFQLENBQWV0RyxRQUFRLENBQUN4RCxNQUF4QixNQUFrQyxDQUFDLENBQTNELEVBQ0E7QUFDSXVKLDhCQUFZLENBQUNOLGNBQUQsRUFBaUIxRyxPQUFqQixFQUEwQjJHLFNBQTFCLENBQVo7QUFDQUUseUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSCxpQkFKRCxNQU1JQSxPQUFPLENBQUMsSUFBRCxDQUFQO0FBQ1A7QUFDSixhQXpCRCxNQTJCQTtBQUNJakUsb0ZBQVksQ0FBQyxNQUFELENBQVo7QUFDQW9FLDBCQUFZLENBQUNOLGNBQUQsRUFBaUIxRyxPQUFqQixFQUEwQjJHLFNBQTFCLENBQVo7QUFDQUUscUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLFdBbENELE1Bb0NBO0FBQ0lqRSxrRkFBWSxDQUFDLE1BQUQsQ0FBWjtBQUNBb0Usd0JBQVksQ0FBQ04sY0FBRCxFQUFpQjFHLE9BQWpCLEVBQTBCMkcsU0FBMUIsQ0FBWjtBQUNBRSxtQkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNIO0FBQ0osU0E1Q0Q7O0FBNkNBSSxXQUFHLENBQUNRLE9BQUosR0FBYyxNQUFNWCxNQUFNLENBQUNHLEdBQUcsQ0FBQ1MsVUFBTCxDQUExQjs7QUFDQVQsV0FBRyxDQUFDeEcsSUFBSjtBQUNIO0FBQ0o7QUFDSixHQXRFTSxDQUFQO0FBdUVILENBekVNLEMsQ0EwRVA7O0FBQ0EsTUFBTXVHLFlBQVksR0FBRyxDQUFDTixjQUFELEVBQWlCMUcsT0FBakIsRUFBMEIyRyxTQUExQixLQUNyQjtBQUNJLE1BQUcsQ0FBQzVQLDJEQUFPLENBQUNpSixPQUFELENBQVgsRUFDSW1DLG9FQUFVLENBQUMsU0FBRCxFQUFZbkMsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDakosMkRBQU8sQ0FBQzRQLFNBQUQsQ0FBWCxFQUNJeEUsb0VBQVUsQ0FBQyxLQUFELEVBQVF3RSxTQUFSLENBQVY7QUFDSixNQUFHLENBQUM1UCwyREFBTyxDQUFDMlAsY0FBRCxDQUFYLEVBQ0l6RyxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JzSCxNQUFoQixDQUF1QmQsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9ncm91cC5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9ncm91cC5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCIvLyBTaSBub24gdXRpbGlzw6ksIHN1cHByaW1lciBsJ2FwcGVsIGRlcyBKUyBmcm9udC1lbmQgcHVpcyByZWNvbXBpbGVyLlxuLy8gUmV2b2lyIGNvbW1lbnQgcsOpb3JnYW5pc2VyIGNlbGEgc291cy1mb3JtZSBkZSBtb2R1bGUgaW5kw6lwZW5kYW50LlxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIFN0YXRzIE1hdG9tbyA6XG4gICAgbWF0b21vOiB7IHVybDogXCJodHRwczovL3N0YXRzLmxlLWZhYi1sYWIuY29tL1wiLCBzaXRlSWQ6IFwiNVwiIH0sXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2Fuc3dlclwiOiBcIi4uL2xhbmcvZnIvYW5zd2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvYW5zd2VyJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwgOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IDx1PjxiPk5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TIHF1ZXN0aW9uczwvYj48L3U+LiBDJ2VzdCBjZXJ0YWluLCB2b3VzIGZlcmV6IG1pZXV4IGxhIHByb2NoYWluZSBmb2lzICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiA8dT48Yj5OQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUyBxdWVzdGlvbnM8L2I+PC91Pi4gQydlc3QgcGFzIG1hbCBkdSB0b3V0ICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogPHU+PGI+TkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMgcXVlc3Rpb25zPC9iPjwvdT4uIEJyYXZvICEgUmllbiBuZSB2b3VzIMOpY2hhcHBlICFcIixcbiAgICBuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIgZGUgc2Vjb25kZXMuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGF1c3NpIMOpbGV2w6kuXCIsXG4gICAgbmVlZE1pbk51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgbmUgcGV1dCDDqnRyZSBpbmbDqXJpZXVyIMOgIDEuXCIsXG4gICAgbmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWROdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIHN1cMOpcmlldXIgYXUgbm9tYnJlIGRlIHF1ZXN0aW9ucy5cIixcbiAgICBuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZi5cIixcbiAgICBuZWVkTWluTnVtYmVyU2Vjb25kZXNSZXNwb25zZSA6IFwiTGEgZHVyw6llIGRlIGxhIHLDqXBvbnNlIG5lIHBldXQgw6p0cmUgbsOpZ2F0aXZlLlwiLFxuICAgIG5vUHJldmlvdXNBbnN3ZXI6IFwiT24gZGlyYWl0IHF1ZSBjJ2VzdCBsYSBwcmVtacOocmUgZm9pcyBxdWUgdm91cyByw6lwb25kZXogw6AgY2UgcXVpei4gQm9ubmUgbGVjdHVyZSAhXCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzTGluZTogXCJMZSBEQVRFQU5TV0VSLCB2b3VzIGF2ZXogcsOpcG9uZHUgY29ycmVjdGVtZW50IMOgIE5CQ09SUkVDVEFOU1dFUlMgcXVlc3Rpb25zIHN1ciBOQlFVRVNUSU9OUyBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcy5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNTdGF0czogXCJFbiBtb3llbm5lLCB2b3VzIGF2ZXogcsOpcG9uZHUgw6AgY2UgcXVpeiBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcywgZW4gYXlhbnQgPGI+QVZHQ09SUkVDVEFOU1dFUlMgJSBkZSBib25uZXMgcsOpcG9uc2VzPC9iPi5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNUaXRsZTogXCJCb25qb3VyICNOT00sIHZvaWNpIHZvcyBwcsOpY8OpZGVudHMgcsOpc3VsdGF0cyDDoCBjZSBxdWl6XCIsXG4gICAgcmVzcG9uc2VTYXZlZEVycm9yIDogXCJDZXBlbmRhbnQgdW5lIGVycmV1ciBhIMOpdMOpIHJlbmNvbnRyw6llIGR1cmFudCBsJ2VucmVnaXN0cmVtZW50IGRlIHZvdHJlIHLDqXN1bHRhdC4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICByZXNwb25zZVNhdmVkTWVzc2FnZSA6IFwiVm90cmUgcsOpc3VsdGF0IGEgw6l0w6kgZW5yZWdpc3Ryw6kuIDxhIGhyZWY9Jy8jVVJMJz5BY2PDqGRlciDDoCB0b3VzIHZvcyBxdWl6czwvYT4uXCIsXG4gICAgc3RhdHNVc2VyOiBcIlZvdXMgYXZleiBlbnJlZ2lzdHLDqSA8Yj5OQkFOU1dFUlMgcsOpcG9uc2VTMSDDoCBOQlFVRVNUSU9OTkFJUkVTIHF1aXpTMiBkaWZmw6lyZW50UzM8L2I+IHN1ciBsZXMgTkJUT1RRVUVTVElPTk5BSVJFUyBwcm9wb3PDqVM0IHBhciBsZSBzaXRlLjxicj5FbiBtb3llbm5lLCB2b3VzIGF2ZXogbWlzIEFWR0RVUkFUSU9OIHNlY29uZGVzIMOgIHLDqXBvbmRyZSBldCBhdmV6IDxiPmNvcnJlY3RlbWVudCByw6lwb25kdSDDoCBBVkdDT1JSRUNUQU5TV0VSUyAlIGRlcyBxdWVzdGlvbnM8L2I+LlwiLFxuICAgIHdhbnRUb1NhdmVSZXNwb25zZXM6IFwiU2kgdm91cyBsZSBzb3VoYWl0ZXosIHZvdXMgcG91dmV6IDx1PjxiPnNhdXZlZ2FyZGVyIHZvdHJlIHLDqXN1bHRhdDwvYj48L3U+IGVuIGNyw6lhbnQgdm90cmUgY29tcHRlIGNpLWRlc3NvdXMuIENlbGEgdm91cyBwZXJtZXR0cmEgYXVzc2kgZGUgPHU+PGI+cmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBcXFwiZ3JhaW5lcyBkZSBjdWx0dXJlXFxcIjwvYj48L3U+IGRpcmVjdGVtZW50IHN1ciB2b3RyZSBlLW1haWwuXCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyDDoCBzdXBwcmltZXIgdW5lIGZvaXMgcXVlIHRvdXQgcsOpY3Vww6lyZXIgZHUgYmFja2VuZCA6XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmwgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICB1c2Vyc0dldENvbmZpZ1VybCA6IFwiL3VzZXIvZ2V0Y29uZmlnXCIsXG4gICAgbGFuZyA6IFwiZnJcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIlxufTsiLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBEJ0FGRklDSEVSIEVUIFLDiVBPTkRSRSDDgCBVTiBHUk9VUEUgREUgUVVJWlNcblxuLy8vIElsIG4nZXN0IHBhcyBuw6ljZXNzYWlyZSBkJ8OqdHJlIGNvbm5lY3TDqSBwb3VyIHLDqXBvbmRyZSBhdSBxdWl6IGV0IHZvaXIgc29uIHLDqXN1bHRhdC5cbi8vLyBNYWlzIHNpIHBhcyBjb25uZWN0w6ksIG9uIHByb3Bvc2Ugw6AgbCdpbnRlcm5hdXRlIGRlIHNlIGNvbm5lY3RlciBvdSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgc2F1dmVnYXJkZXIgc29uIHLDqXN1bHRhdC5cbi8vLyBEYW5zIGNlIGJ1dCBzb24gcsOpc3VsdGF0IGVzdCBzdG9ja8OpIGRhbnMgc29uIG5hdmlnYXRldXIuXG4vLy8gU2kgaWwgZXN0IGNvbm5lY3TDqSwgbCdlbnJlZ2lzdHJlbWVudCBkZSBzb24gcsOpc3VsdGF0IHNlIGZhaXQgYXV0b21hdGlxdWVtZW50IGPDtHTDqSBzZXJ2ZXVyIGV0IHNlcyDDqXZlbnR1ZWxzIHByw6ljw6lkZW50cyByw6lzdWx0YXRzIHNvbnQgYWZmaWNow6lzLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuaW1wb3J0IHsgZ2V0UHJldmlvdXNBbnN3ZXJzLCBncm91cFJvdXRlcywgc2F2ZUFuc3dlcnNSb3V0ZSB9IGZyb20gXCIuLi8uLi9jb25maWcvcXVlc3Rpb25uYWlyZXMuanNcIjtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyBjaGVja0Fuc3dlck91cHV0LCBzYXZlQW5zd2VyIH0gZnJvbSBcIi4vdG9vbHMvYW5zd2Vycy5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgbG9hZE1hdG9tbyB9IGZyb20gXCIuL3Rvb2xzL21hdG9tby5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRUaW1lRGlmZmVyZW5jZSB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBub1ByZXZpb3VzQW5zd2VyLCBwcmV2aW91c0Fuc3dlcnNMaW5lLCBwcmV2aW91c0Fuc3dlcnNTdGF0cywgcHJldmlvdXNBbnN3ZXJzVGl0bGUsIHJlc3BvbnNlU2F2ZWRFcnJvciwgd2FudFRvU2F2ZVJlc3BvbnNlcyB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9hbnN3ZXJcIik7XG5jb25zdCB7IHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBidG5TdWJtaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNoZWNrUmVzcG9uc2VzXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZXhwbGFuYXRpb25zVGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImV4cGxhbmF0aW9uc1RpdGxlXCIpO1xuY29uc3QgZXhwbGFuYXRpb25zQ29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhwbGFuYXRpb25zQ29udGVudFwiKTtcbmNvbnN0IG15Rm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ3JvdXBcIik7XG5cbi8vIEFmZmljaGUgbGUgYm91dG9uIGRlIHNvdW1pc3Npb24gKyBkw6ljbGVuY2hlIGxlIGNocm9ub23DqHRyZSBtZXN1cmFudCBsYSBkdXLDqWUgZGUgbGEgcsOpcG9uc2UuXG5sZXQgY2hyb25vQmVnaW49MDtcbmNvbnN0IGJlZ2luQW5zd2VyID0gKCkgPT5cbntcbiAgICBjaHJvbm9CZWdpbj1EYXRlLm5vdygpO1xuICAgIGJ0blN1Ym1pdC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbn1cblxubGV0IGlzQ29ubmVjdGVkLCB1c2VyO1xuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICAvLyBTaSBKUyBhY3RpdsOpLCBvbiBhZmZpY2hlIGxlIGJvdXRvbiBkZSBzb3VtaXNzaW9uIGR1IGZvcm11bGFpcmUgOlxuICAgICAgICBiZWdpbkFuc3dlcigpO1xuICAgICAgICBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1widXNlclwiXSk7Ly8gXCJ1c2VyXCIgY2FyIHNldWxzIGxlcyB1dGlsaXNhdGV1cnMgZGUgYmFzZSBwZXV2ZW50IGVucmVnaXN0cmVyIGxldXJzIHLDqXBvbnNlcyBhdXggcXVpenNcbiAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBlc3QgY29ubmVjdMOpIGV0IGEgZMOpasOgIHLDqXBvbmR1IMOgIGNlIHF1aXosIG9uIGFmZmljaGUgc2VzIHByw6ljw6lkZW50ZXMgcsOpcG9uc2VzIMOgIGxhIHBsYWNlIGR1IHRleHRlIHNlcnZhbnQgw6AgZXhwbGlxdWVyIGxlIHRvcG8gYXV4IG5vdXZlYXV4XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpOy8vIGxpZW4gdmVycyBsZSBjb21wdGUgYWRhcHTDqSBwb3VyIGxlcyB1dGlsaXNhdGV1cnMgY29ubmVjdMOpc1xuICAgICAgICAgICAgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyh1c2VyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBsb2FkTWF0b21vKCk7XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcbmhlbGxvRGV2KCk7XG5cbi8vIFRyYWl0ZW1lbnQgZGUgbCdlbnZvaSBkZSBsYSByw6lwb25zZSBkZSBsJ3V0aWxpc2F0ZXVyIDpcbmxldCBhbnN3ZXIgPSB7fTtcbm15Rm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAgICAgIFxuICAgICAgICBidG5TdWJtaXQuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjsvLyBzZXVsZW1lbnQgdW4gZW52b2kgw6AgbGEgZm9pcywgU1ZQIDopXG4gICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiOy8vIHN1cHByaW1lIGxlcyDDqXZlbnR1ZWxzIG1lc3NhZ2VzIGTDqWrDoCBhZmZpY2jDqXMuXG4gICAgICAgIGNvbnN0IHVzZXJSZXNwb25zZXM9Z2V0RGF0YXNGcm9tSW5wdXRzKG15Rm9ybSk7XG4gICAgICAgIGFuc3dlci5kdXJhdGlvbj1NYXRoLnJvdW5kKChEYXRlLm5vdygpLWNocm9ub0JlZ2luKS8xMDAwKTtcbiAgICAgICAgYW5zd2VyLm5iUXVlc3Rpb25zPTA7XG4gICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzPTA7XG4gICAgICAgIGFuc3dlci5Hcm91cElkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ3JvdXBJZFwiKS52YWx1ZTtcbiAgICAgICAgLy8gTGVzIHLDqXBvbnNlcyBzb250IHJlZ3JvdXDDqWVzIHBhciBxdWVzdGlvbiwgZG9uYyBxdWFuZCBpZFF1ZXN0aW9uIGNoYW5nZSwgb24gY29ubmHDrnQgbGUgcsOpc3VsdGF0IHBvdXIgbGEgcXVlc3Rpb24gcHLDqWPDqWRlbnRlLlxuICAgICAgICAvLyBQb3VyIHF1J3VuZSByw6lwb25zZSBzb2l0IGJvbm5lLCBpbCBmYXV0IGNvY2hlciB0b3V0ZXMgbGVzIGJvbm5lcyByw6lwb25zZXMgKHNpIFFDTSkgw6AgbGEgcXVlc3Rpb24gRVQgY29jaGVyIGF1Y3VuZSBkZXMgbWF1dmFpc2VzLlxuICAgICAgICBsZXQgaWRDaG9pY2UsIGlkUXVlc3Rpb249XCJcIiwgZ29vZFJlc3BvbnNlPWZhbHNlO1xuICAgICAgICBmb3IobGV0IGl0ZW0gaW4gdXNlclJlc3BvbnNlcylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoaXRlbS5zdGFydHNXaXRoKFwiaXNDb3JyZWN0X3Jlc3BvbnNlX1wiKSkvLyA9IE5vdXZlbGxlIHLDqXBvbnNlIHBvc3NpYmxlLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkQ2hvaWNlID0gaXRlbS5zdWJzdHJpbmcoaXRlbS5sYXN0SW5kZXhPZihcIl9cIikgKyAxKTtcbiAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicXVlc3Rpb25faWRfcmVzcG9uc2VfXCIraWRDaG9pY2VdICE9IGlkUXVlc3Rpb24pIC8vID0gb24gY29tbWVuY2Ugw6AgdHJhaXRlciB1bmUgbm91dmVsbGUgcXVlc3Rpb24uXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZFF1ZXN0aW9uPXVzZXJSZXNwb25zZXNbXCJxdWVzdGlvbl9pZF9yZXNwb25zZV9cIitpZENob2ljZV07XG4gICAgICAgICAgICAgICAgICAgIGFuc3dlci5uYlF1ZXN0aW9ucysrO1xuICAgICAgICAgICAgICAgICAgICBpZihnb29kUmVzcG9uc2UpIC8vID0gcGFzIGQnZXJyZXVyIMOgIGxhIHF1ZXN0aW9uIHByw6ljw6lkZW50ZVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMrKztcbiAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPXRydWU7Ly8gTGEgcsOpcG9uc2UgZXN0IGNvbnNpZMOpcsOpZSBjb21tZSBib25uZSwganVzcXUnw6AgbGEgcHJlbWnDqHJlIGVycmV1ci4uLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW2l0ZW1dID09IFwidHJ1ZVwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZV9cIitpZENob2ljZSkucGFyZW50Tm9kZS5jbGFzc0xpc3QuYWRkKFwiaXNDb3JyZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdID09PSB1bmRlZmluZWQpLy8gPSB1bmUgYm9ubmUgcsOpcG9uc2UgbidhIHBhcyDDqXTDqSBzw6lsZWN0aW9ubsOpZVxuICAgICAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPWZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdID09PSBcIm9uXCIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RSZXNwb25zZT1mYWxzZTsgLy8gPSB1bmUgbWF1dmFpc2UgcsOpcG9uc2UgYSDDqXTDqSBzw6lsZWN0aW9ubsOpZVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZV9cIitpZENob2ljZSkucGFyZW50Tm9kZS5jbGFzc0xpc3QuYWRkKFwiaXNOb3RDb3JyZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNpIGonYWkgYmllbiByw6lwb25kdSDDoCBsYSBkZXJuacOocmUgcXVlc3Rpb24sIGlsIGZhdXQgbGUgY29tcHRlciBpY2ksIGNhciBvbiBlc3Qgc29ydGkgZGUgbGEgYm91Y2xlIDpcbiAgICAgICAgaWYoZ29vZFJlc3BvbnNlKVxuICAgICAgICAgICAgYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMrKztcblxuICAgICAgICAvLyBBZmZpY2hhZ2UgZHUgcsOpc3VsdGF0LCBzdWl2YW50IHNpIGwndXRpbGlzYXRldXIgZXN0IGNvbm5lY3TDqSBvdSBwYXMgZXQgc29uIHNjb3JlIDpcbiAgICAgICAgbGV0IGdldE91cHV0PWNoZWNrQW5zd2VyT3VwdXQoYW5zd2VyKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgZXN0IGNvbm5lY3TDqSwgb24gcGFzc2Ugc29uIHLDqXN1bHRhdCBhdSBzZXJ2ZXVyIHBvdXIgbGUgc2F1dmVnYXJkZXIuXG4gICAgICAgICAgICBjb25zdCB4aHJTYXZlQW5zd2VyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtncm91cFJvdXRlcytzYXZlQW5zd2Vyc1JvdXRlKTtcbiAgICAgICAgICAgIHhoclNhdmVBbnN3ZXIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4aHJSZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgKHhoclJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIreGhyUmVzcG9uc2UubWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIrcmVzcG9uc2VTYXZlZEVycm9yLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ1RlbXBsYXRlLnVzZXJIb21lUGFnZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFB1aXMgb24gbGUgcmVkaXJpZ2UgdmVycyBzb24gcsOpc3VsdGF0IDpcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVyZT13aW5kb3cubG9jYXRpb247Ly8gd2luZG93LmxvY2F0aW9uIMOgIGFqb3V0ZXIgcG91ciBuZSBwYXMgcXVpdHRlciBsYSBwYWdlIGVuIG1vZGUgXCJwcmV2aWV3XCIuLi5cbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJleHBsYW5hdGlvbnNcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgIGFuc3dlci50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZSgpOy8vIE9uIGVuIHByb2ZpdGUgcG91ciBtZXR0cmUgbGVzIHBlbmR1bGVzIMOgIGwnaGV1cmUuXG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLnNlbmQoSlNPTi5zdHJpbmdpZnkoYW5zd2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7ICAgLy8gU2kgaW50ZXJuYXV0ZSBub24gY29ubmVjdMOpLCBvbiBlbnJlZ2lzdHJlIGxlIHLDqXN1bHRhdCBjw7R0w6kgY2xpZW50IHBvdXIgcGVybWV0dHJlIGRlIGxlIHJldHJvdXZlciBhdSBtb21lbnQgZGUgbGEgY3LDqWF0aW9uIGR1IGNvbXB0ZSBvdSBkZSBsYSBjb25uZXhpb24uXG4gICAgICAgICAgICBpZihzYXZlQW5zd2VyKGFuc3dlcikpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIGdldE91cHV0Kz1cIjwvcD48cD5cIit3YW50VG9TYXZlUmVzcG9uc2VzK1wiPC9wPlwiO1xuICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgZ2V0T3VwdXQsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnN1YnNjcmliZUJ0bnNcIikuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIC8vIE1haXMgaW51dGlsZSBkZSBwcm9wb3NlciBkZSBjcsOpZXIgdW4gY29tcHRlIHNpIGxlIHN0b2NrYWdlIGxvY2FsIG5lIGZvbmN0aW9ubmUgcGFzXG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGdldE91cHV0LCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgIC8vIFB1aXMgb24gbGUgcmVkaXJpZ2UgdmVycyBzb24gcsOpc3VsdGF0IDpcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoPVwiXCI7XG4gICAgICAgICAgICBjb25zdCBoZXJlPXdpbmRvdy5sb2NhdGlvbjsvLyB3aW5kb3cubG9jYXRpb24gw6AgYWpvdXRlciBwb3VyIG5lIHBhcyBxdWl0dGVyIGxhIHBhZ2UgZW4gbW9kZSBcInByZXZpZXdcIi4uLlxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJyZXNwb25zZVwiO1xuICAgICAgICB9XG4gICAgICAgIC8vICsgQWZmaWNoYWdlIGRlcyB0ZXh0ZXMgZCdleHBsaWNhdGlvbnMgcG91ciBjaGFxdWUgcXVlc3Rpb25cbiAgICAgICAgY29uc3QgZXhwbGFuYXRpb25zPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaGVscFwiKTtcbiAgICAgICAgZm9yKGxldCBpIGluIGV4cGxhbmF0aW9ucylcbiAgICAgICAgICAgIGlmKGV4cGxhbmF0aW9uc1tpXS5zdHlsZSAhPT0gdW5kZWZpbmVkKSAvLyBzaW5vbiwgbGEgY29uc29sZSBhZmZpY2hlIHVuZSBlcnJldXIgXCJUeXBlRXJyb3I6IGV4cGxhbmF0aW9uc1tpXS5zdHlsZSBpcyB1bmRlZmluZWRcIiwgYmllbiBxdWUgdG91dCBmb25jdGlvbm5lICg/KVxuICAgICAgICAgICAgICAgIGV4cGxhbmF0aW9uc1tpXS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn0pXG5cbi8vIEZvbmN0aW9uIHbDqXJpZmlhbnQgbGVzIHByw6ljw6lkZW50ZXMgcsOpcG9uc2VzIGRlIGwndXRpbGlzYXRldXIuXG4vLyBVdGlsZSBzaSBjb25uZWN0w6kgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQgZGUgbGEgcGFnZSwgcHVpcyBhcHLDqHMgdW5lIG5vdXZlbGxlIHLDqXBvbnNlLlxuY29uc3QgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyA9ICh1c2VyKSA9Plxue1xuICAgIGNvbnN0IHhoclByZXZpb3VzUmVzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyUHJldmlvdXNSZXMub3BlbihcIkdFVFwiLCBhcGlVcmwrZ3JvdXBSb3V0ZXMrZ2V0UHJldmlvdXNBbnN3ZXJzK3VzZXIuaWQrXCIvXCIrZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJncm91cElkXCIpLnZhbHVlKTtcbiAgICB4aHJQcmV2aW91c1Jlcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5iUmVzcG9uc2VzPXJlc3BvbnNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNBbnN3ZXJzQ29udGVudD1cIlwiO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zVGl0bGUsIFwic3BhblwiLCBwcmV2aW91c0Fuc3dlcnNUaXRsZS5yZXBsYWNlKFwiI05PTVwiLCB1c2VyLm5hbWUpKTtcbiAgICAgICAgICAgICAgICBpZihuYlJlc3BvbnNlcyE9PTApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG90TmJRdWVzdGlvbnM9MCwgdG90TmJDb3JyZWN0QW5zd2Vycz0wLCB0b3REdXJhdGlvbj0wLCBtYXBMaW5lQ29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3ROYlF1ZXN0aW9ucys9cmVzcG9uc2VbaV0ubmJRdWVzdGlvbnM7Ly8gISBvbiBuZSBwZXV0IHNlIGJhc2VyIHN1ciBsYSB2ZXJzaW9uIGFjdHVlbGxlIGR1IHF1aXosIGNhciBsZSBub21icmUgZGUgcXVlc3Rpb25zIGEgcHUgw6l2b2x1ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3ROYkNvcnJlY3RBbnN3ZXJzKz1yZXNwb25zZVtpXS5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90RHVyYXRpb24rPXJlc3BvbnNlW2ldLmR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwTGluZUNvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVBTlNXRVIgOiBkYXRlRm9ybWF0KHJlc3BvbnNlW2ldLmNyZWF0ZWRBdCwgbGFuZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJDT1JSRUNUQU5TV0VSUyA6IHJlc3BvbnNlW2ldLm5iQ29ycmVjdEFuc3dlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJRVUVTVElPTlMgOiByZXNwb25zZVtpXS5uYlF1ZXN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkdEVVJBVElPTiA6IHJlc3BvbnNlW2ldLmR1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbnN3ZXJzQ29udGVudCs9XCI8bGk+XCIrcmVwbGFjZUFsbChwcmV2aW91c0Fuc3dlcnNMaW5lLCBtYXBMaW5lQ29udGVudCkrXCI8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hcExpbmVDb250ZW50ID1cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgQVZHRFVSQVRJT04gOiBNYXRoLnJvdW5kKHRvdER1cmF0aW9uL25iUmVzcG9uc2VzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFWR0NPUlJFQ1RBTlNXRVJTIDogTWF0aC5yb3VuZCh0b3ROYkNvcnJlY3RBbnN3ZXJzL3RvdE5iUXVlc3Rpb25zKjEwMClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbnN3ZXJzQ29udGVudD1cIjxoNT5cIityZXBsYWNlQWxsKHByZXZpb3VzQW5zd2Vyc1N0YXRzLCBtYXBMaW5lQ29udGVudCkrXCI8L2g1PlwiK3ByZXZpb3VzQW5zd2Vyc0NvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zQ29udGVudCwgXCJ1bFwiLCBwcmV2aW91c0Fuc3dlcnNDb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGV4cGxhbmF0aW9uc0NvbnRlbnQsIFwidWxcIiwgbm9QcmV2aW91c0Fuc3dlcik7XG4gICAgICAgICAgICAgICAgLy8gZGFucyB1biBjYXMgY29tbWUgZGFucyBsJ2F1dHJlLCBib3V0b24gcG91ciByZXZlbmlyIMOgIGwnYWNjdWVpbCBkdSBjb21wdGVcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGV4cGxhbmF0aW9uc0NvbnRlbnQsIFwicFwiLCBcIjxhIGhyZWY9XFxcIi9cIitjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2UrXCJcXFwiIGNsYXNzPVxcXCJidXR0b24gY2FyZGJvYXJkXFxcIj5cIitjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2VUeHQrXCI8L2E+XCIsIFwiXCIsIFtcImJ0blwiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHhoclByZXZpb3VzUmVzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgIHhoclByZXZpb3VzUmVzLnNlbmQoKTtcbn0iLCJjb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi9jb25maWcvZ2VuZXJhbFwiKTtcblxuaW1wb3J0IHsgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vLi4vbGFuZy9cIitjb25maWdGcm9udEVuZC5sYW5nK1wiL2Fuc3dlclwiKTtcblxuLy8gRW5yZWdpc3RyZW1lbnQgY8O0dMOpIGNsaWVudCBkdSBkZXJuaWVyIHLDqXN1bHRhdCDDoCB1biBxdWl6IGVuIGF0dGVuZGFudCBkJ8OqdHJlIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IHNhdmVBbnN3ZXIgPSAoYW5zd2VyKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAge1xuICAgICAgICBzYXZlTG9jYWx5KFwibGFzdEFuc3dlclwiLCBhbnN3ZXIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFJldG91cm5lIHVuIHRleHRlIHN1aXZhbnQgbGUgbm9tYnJlIGRlIGJvbm5lcyByw6lwb25zZXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlck91cHV0ID0gKGFuc3dlcikgPT5cbntcbiAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmF0aW89YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMvYW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICBjb25zdCBtYXBPYmo9XG4gICAgICAgIHtcbiAgICAgICAgICAgIERVUkFUSU9OOiBhbnN3ZXIuZHVyYXRpb24sXG4gICAgICAgICAgICBOQkNPUlJFQ1RBTlNXRVJTOiBhbnN3ZXIubmJDb3JyZWN0QW5zd2VycyxcbiAgICAgICAgICAgIE5CUVVFU1RJT05TOiBhbnN3ZXIubmJRdWVzdGlvbnNcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3V0cHV0PVwiXCI7XG4gICAgICAgIGlmKHJhdGlvIDwgMC40KVxuICAgICAgICAgICAgb3V0cHV0PXJlcGxhY2VBbGwodHh0LmNoZWNrUmVzcG9uc2VzT3VwdXRGYWlsLCBtYXBPYmopO1xuICAgICAgICBlbHNlIGlmKHJhdGlvIDwgMC44KVxuICAgICAgICAgICAgb3V0cHV0PXJlcGxhY2VBbGwodHh0LmNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0sIG1hcE9iaik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG91dHB1dD1yZXBsYWNlQWxsKHR4dC5jaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcywgbWFwT2JqKTtcbiAgICAgICAgaWYob3V0cHV0KVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIFwiXCI7XG59IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/groupElement.app.js b/front/public/JS/groupElement.app.js index 4f348ce..774d19d 100644 --- a/front/public/JS/groupElement.app.js +++ b/front/public/JS/groupElement.app.js @@ -974,21 +974,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_forms_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/forms.js */ "./src/tools/forms.js"); /* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/matomo.js */ "./src/tools/matomo.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- PAGE AFFICHANT L'ÉLÉMENT D'UN GROUPE DE QUIZ ET PROPOSANT DE CRÉER SON COMPTE DE MANIÈRE SIMPLIFIÉE /// L'utilisateur peut avoir répondu à un quiz avant de lancer la création de son compte /// Dans ce cas il faut enregistrer son résultat en même temps que les informations de son compte // Fichier de configuration tirés du backend : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // besoin de toutes les déclarations, car appel dynamique : configTemplate[homePage] +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // besoin de toutes les déclarations, car appel dynamique : configTemplate[homePage] -var configUsers = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // idem pour configurer formulaire +const configUsers = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // idem pour configurer formulaire // Importation des fonctions utiles au script : @@ -999,62 +995,38 @@ var configUsers = __webpack_require__(/*! ../../config/users */ "../config/users // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require.serverError; +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - needUniqueEmail = _require2.needUniqueEmail; // Principaux éléments du DOM manipulés : +const { + needUniqueEmail +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); // Principaux éléments du DOM manipulés : -var btnSubmit = document.getElementById("submitDatas"); -var divResponse = document.getElementById("response"); -var emailInput = document.getElementById("email"); -var myForm = document.getElementById("subscription"); // Test de connexion de l'utilisateur + affichage formulaire d'inscription : +const btnSubmit = document.getElementById("submitDatas"); +const divResponse = document.getElementById("response"); +const emailInput = document.getElementById("email"); +const myForm = document.getElementById("subscription"); // Test de connexion de l'utilisateur + affichage formulaire d'inscription : -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(); +const initialise = async () => { + try { + let isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(), + user; - case 3: - isConnected = _context.sent; - - if (isConnected) { - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); // lien vers le compte adapté pour les utilisateurs connectés - } else { - Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_5__["loadMatomo"])(); - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, myForm); - myForm.style.display = "block"; - } - - _context.next = 11; - break; - - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - console.error(_context.t0); - - case 11: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 7]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + if (isConnected) { + user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); // lien vers le compte adapté pour les utilisateurs connectés + } else { + Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_5__["loadMatomo"])(); + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, myForm); + myForm.style.display = "block"; + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + console.error(e); + } +}; initialise(); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); // Test si l'e-mail saisi est déjà utilisé par un autre compte. @@ -1064,15 +1036,15 @@ emailInput.addEventListener("focus", function (e) { document.getElementById("emailMessage").innerHTML = ""; // pour supprimer l'éventuel message d'erreur déjà affiché }); emailInput.addEventListener("blur", function (e) { - var emailValue = emailInput.value.trim(); + const emailValue = emailInput.value.trim(); if (emailValue !== "") { - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.checkIfIsEmailfreeRoute); xhr.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 200 && response.free !== undefined && response.free === false) { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("emailMessage"), "div", needUniqueEmail.replace("#URL", configTemplate.connectionPage), "", ["error"]); @@ -1082,7 +1054,7 @@ emailInput.addEventListener("blur", function (e) { }; xhr.setRequestHeader("Content-Type", "application/json"); - var datas = { + const datas = { emailTest: emailValue }; xhr.send(JSON.stringify(datas)); @@ -1092,12 +1064,12 @@ emailInput.addEventListener("blur", function (e) { myForm.addEventListener("submit", function (e) { try { e.preventDefault(); - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.subscribeRoute); xhr.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 201) { myForm.style.display = "none"; @@ -1111,7 +1083,7 @@ myForm.addEventListener("submit", function (e) { }; xhr.setRequestHeader("Content-Type", "application/json"); - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(myForm); + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(myForm); if (datas) { datas.timeDifference = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["getTimeDifference"])(configUsers); // Si l'utilisateur a précédement répondu à un quiz, on ajoute les données de son résultat : @@ -1141,14 +1113,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1166,32 +1137,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
"); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1215,13 +1175,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1242,25 +1202,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1268,49 +1220,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1331,7 +1261,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__); // Fonction chargeant le code matomo -var loadMatomo = function loadMatomo() { +const loadMatomo = () => { // chargement de matomo var _paq = window._paq = window._paq || []; //ajout cnil : @@ -1397,27 +1327,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1426,11 +1352,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1444,96 +1370,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1542,4 +1440,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9ncm91cEVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJjb25maWdVc2VycyIsImJ0blN1Ym1pdCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZSZXNwb25zZSIsImVtYWlsSW5wdXQiLCJteUZvcm0iLCJpbml0aWFsaXNlIiwiY2hlY2tTZXNzaW9uIiwiaXNDb25uZWN0ZWQiLCJ1c2VyIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJsb2FkTWF0b21vIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwic3R5bGUiLCJkaXNwbGF5IiwiYWRkRWxlbWVudCIsImNvbnNvbGUiLCJlcnJvciIsImhlbGxvRGV2IiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJpbm5lckhUTUwiLCJlbWFpbFZhbHVlIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsImZyZWUiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiZGF0YXMiLCJlbWFpbFRlc3QiLCJzZW5kIiwic3RyaW5naWZ5IiwicHJldmVudERlZmF1bHQiLCJtZXNzYWdlIiwicmVtb3ZlTG9jYWx5IiwiZXJyb3JzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwidGltZURpZmZlcmVuY2UiLCJnZXRUaW1lRGlmZmVyZW5jZSIsImNoZWNrQW5zd2VyRGF0YXMiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJhcHBlbmRDaGlsZCIsImxvZyIsImxpbmsiLCJob21lUGFnZSIsImlucHV0c0NvbmYiLCJlbGVtZW50cyIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsImVtcHlGb3JtIiwidHlwZSIsImNoZWNrZWQiLCJlbXB5QW5kSGlkZUZvcm0iLCJfcGFxIiwid2luZG93IiwicHVzaCIsInNlbGYiLCJnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0Iiwibm93Iiwibm93VHMiLCJyb3VuZCIsImdldFRpbWUiLCJ2aXNpdG9ySW5mbyIsImdldFZpc2l0b3JJbmZvIiwiY3JlYXRlVHMiLCJwYXJzZUludCIsImNvb2tpZVRpbWVvdXQiLCJvcmlnaW5hbFRpbWVvdXQiLCJzZXRWaXNpdG9yQ29va2llVGltZW91dCIsInUiLCJkIiwiZyIsInMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJsb2NhdGlvbiIsImluZGV4T2YiLCJhc3NpZ24iLCJv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SXRDLE1BQU0sQ0FBQ2tELFFBQVAsQ0FBZ0JFLE1BQWhCLENBQXVCZCxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2dyb3VwRWxlbWVudC5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9ncm91cEVsZW1lbnQuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwiLy8gU2kgbm9uIHV0aWxpc8OpLCBzdXBwcmltZXIgbCdhcHBlbCBkZXMgSlMgZnJvbnQtZW5kIHB1aXMgcmVjb21waWxlci5cbi8vIFJldm9pciBjb21tZW50IHLDqW9yZ2FuaXNlciBjZWxhIHNvdXMtZm9ybWUgZGUgbW9kdWxlIGluZMOpcGVuZGFudC5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBTdGF0cyBNYXRvbW8gOlxuICAgIG1hdG9tbzogeyB1cmw6IFwiaHR0cHM6Ly9zdGF0cy5sZS1mYWItbGFiLmNvbS9cIiwgc2l0ZUlkOiBcIjVcIiB9LFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gUEFHRSBBRkZJQ0hBTlQgTCfDiUzDiU1FTlQgRCdVTiBHUk9VUEUgREUgUVVJWiBFVCBQUk9QT1NBTlQgREUgQ1LDiUVSIFNPTiBDT01QVEUgREUgTUFOScOIUkUgU0lNUExJRknDiUVcblxuLy8vIEwndXRpbGlzYXRldXIgcGV1dCBhdm9pciByw6lwb25kdSDDoCB1biBxdWl6IGF2YW50IGRlIGxhbmNlciBsYSBjcsOpYXRpb24gZGUgc29uIGNvbXB0ZVxuLy8vIERhbnMgY2UgY2FzIGlsIGZhdXQgZW5yZWdpc3RyZXIgc29uIHLDqXN1bHRhdCBlbiBtw6ptZSB0ZW1wcyBxdWUgbGVzIGluZm9ybWF0aW9ucyBkZSBzb24gY29tcHRlXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiB0aXLDqXMgZHUgYmFja2VuZCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTsvLyBiZXNvaW4gZGUgdG91dGVzIGxlcyBkw6ljbGFyYXRpb25zLCBjYXIgYXBwZWwgZHluYW1pcXVlIDogY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdXG5jb25zdCBjb25maWdVc2VycyA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvdXNlcnNcIik7Ly8gaWRlbSBwb3VyIGNvbmZpZ3VyZXIgZm9ybXVsYWlyZVxuXG4vLyBJbXBvcnRhdGlvbiBkZXMgZm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXREYXRhc0Zyb21JbnB1dHMsIHNldEF0dHJpYnV0ZXNUb0lucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBsb2FkTWF0b21vIH0gZnJvbSBcIi4vdG9vbHMvbWF0b21vLmpzXCI7XG5pbXBvcnQgeyBjaGVja0Fuc3dlckRhdGFzLCBjaGVja1Nlc3Npb24sIGdldFRpbWVEaWZmZXJlbmNlIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB7IHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IG5lZWRVbmlxdWVFbWFpbCB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgYnRuU3VibWl0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3VibWl0RGF0YXNcIik7XG5jb25zdCBkaXZSZXNwb25zZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZW1haWxJbnB1dD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVtYWlsXCIpO1xuY29uc3QgbXlGb3JtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaXB0aW9uXCIpO1xuXG4vLyBUZXN0IGRlIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyICsgYWZmaWNoYWdlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbiA6XG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGxldCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKSwgdXNlcjtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdUZW1wbGF0ZSk7Ly8gbGllbiB2ZXJzIGxlIGNvbXB0ZSBhZGFwdMOpIHBvdXIgbGVzIHV0aWxpc2F0ZXVycyBjb25uZWN0w6lzXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBsb2FkTWF0b21vKCk7XG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnVXNlcnMsIG15Rm9ybSk7XG4gICAgICAgICAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcbmhlbGxvRGV2KCk7XG5cbi8vIFRlc3Qgc2kgbCdlLW1haWwgc2Fpc2kgZXN0IGTDqWrDoCB1dGlsaXPDqSBwYXIgdW4gYXV0cmUgY29tcHRlLlxuLy8gU2kgYydlc3QgbGUgY2FzLCBsYSB2YWxpZGF0aW9uIGR1IGZvcm11bGFpcmUgZXN0IGJsb3F1w6llLlxuZW1haWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgZnVuY3Rpb24oZSlcbntcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVtYWlsTWVzc2FnZVwiKS5pbm5lckhUTUw9XCJcIjsvLyBwb3VyIHN1cHByaW1lciBsJ8OpdmVudHVlbCBtZXNzYWdlIGQnZXJyZXVyIGTDqWrDoCBhZmZpY2jDqVxufSk7XG5lbWFpbElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgY29uc3QgZW1haWxWYWx1ZT1lbWFpbElucHV0LnZhbHVlLnRyaW0oKTtcbiAgICBpZihlbWFpbFZhbHVlIT09XCJcIilcbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrY29uZmlnVXNlcnMuY2hlY2tJZklzRW1haWxmcmVlUm91dGUpO1xuICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmZyZWUgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5mcmVlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbWFpbE1lc3NhZ2VcIiksIFwiZGl2XCIsIG5lZWRVbmlxdWVFbWFpbC5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIGNvbnN0IGRhdGFzPXsgZW1haWxUZXN0OmVtYWlsVmFsdWUgfTtcbiAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICB9XG59KTtcblxuLy8gVHJhaXRlbWVudCBkZSBsJ2Vudm9pIGRlcyBkb25uw6llcyBkJ2luc2NyaXB0aW9uIDpcbm15Rm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAgICAgICBcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5zdWJzY3JpYmVSb3V0ZSk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJsYXN0QW5zd2VyXCIpOy8vICEhIGltcG9ydGFudCwgcG91ciBuZSBwYXMgZW5yZWdpc3RlciBwbHVzaWV1cnMgZm9pcyBsZSByw6lzdWx0YXQuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMobXlGb3JtKTtcbiAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLnRpbWVEaWZmZXJlbmNlPWdldFRpbWVEaWZmZXJlbmNlKGNvbmZpZ1VzZXJzKTtcbiAgICAgICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgYSBwcsOpY8OpZGVtZW50IHLDqXBvbmR1IMOgIHVuIHF1aXosIG9uIGFqb3V0ZSBsZXMgZG9ubsOpZXMgZGUgc29uIHLDqXN1bHRhdCA6XG4gICAgICAgICAgICBkYXRhcz1jaGVja0Fuc3dlckRhdGFzKGRhdGFzKTtcbiAgICAgICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn0pOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgPSAoaW5wdXRzQ29uZiwgbXlGb3JtKSA9Plxue1xuICAgIGZvcihsZXQgaSBpbiBteUZvcm0uZWxlbWVudHMpXG4gICAge1xuICAgICAgICBpZighaXNFbXB0eShteUZvcm0uZWxlbWVudHNbaV0uaWQpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgaWRJbnB1dD1teUZvcm0uZWxlbWVudHNbaV0uaWQ7XG4gICAgICAgICAgICBpZihpbnB1dHNDb25mW2lkSW5wdXRdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dEhUTUw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRJbnB1dCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIGluIGlucHV0c0NvbmZbaWRJbnB1dF0pXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SFRNTC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbnB1dHNDb25mW2lkSW5wdXRdW2F0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBSw6ljdXDDqHJlIHRvdXRlcyBsZXMgdmFsZXVycyBkZSBjaGFtcHMgZW4gb21ldHRhbnQgbGVzIGNoZWNrYm94IG5vbiBjb2Now6llcywgZXRjLlxuZXhwb3J0IGNvbnN0IGdldERhdGFzRnJvbUlucHV0cyA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZGF0YXM9e307XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAgICAgZGF0YXNbZW50cmllWzBdXT1lbnRyaWVbMV07XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBWaWRlIHRvdXMgbGVzIGNoYW1wcyBkJ3VuIGZvcm11bGFpcmUsIHkgY29tcHJpcyBoaWRkZW4sIGNoZWNrYm94LCBldGMuXG4vLyBSZXZvaXIgcG91ciBsZXMgc2VsZWN0XG5leHBvcnQgY29uc3QgZW1weUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgIHtcbiAgICAgICAgaWYobXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJjaGVja2JveFwiIHx8IG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwicmFkaW9cIilcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLmNoZWNrZWQ9ZmFsc2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnZhbHVlPVwiXCI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8gVmlkZSBldCBjYWNoZSBsZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgZW1weUFuZEhpZGVGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBlbXB5Rm9ybShteUZvcm0pO1xuICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xufSIsImltcG9ydCB7IG1hdG9tbyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvbWF0b21vLmpzXCI7XG5cbi8vIEZvbmN0aW9uIGNoYXJnZWFudCBsZSBjb2RlIG1hdG9tb1xuZXhwb3J0IGNvbnN0IGxvYWRNYXRvbW8gPSAoKSA9Plxue1xuICAgIC8vIGNoYXJnZW1lbnQgZGUgbWF0b21vXG4gICAgdmFyIF9wYXEgPSB3aW5kb3cuX3BhcSA9IHdpbmRvdy5fcGFxIHx8IFtdO1xuICAgIC8vYWpvdXQgY25pbCAgOlxuICAgIF9wYXEucHVzaChbZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBmdW5jdGlvbiBnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0KClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBub3dUcyA9IE1hdGgucm91bmQobm93LmdldFRpbWUoKSAvIDEwMDApLFxuICAgICAgICAgICAgdmlzaXRvckluZm8gPSBzZWxmLmdldFZpc2l0b3JJbmZvKCk7XG4gICAgICAgICAgICB2YXIgY3JlYXRlVHMgPSBwYXJzZUludCh2aXNpdG9ySW5mb1syXSk7XG4gICAgICAgICAgICB2YXIgY29va2llVGltZW91dCA9IDMzNjk2MDAwOyAvLyAxMyBtb2lzIGVuIHNlY29uZGVzXG4gICAgICAgICAgICB2YXIgb3JpZ2luYWxUaW1lb3V0ID0gY3JlYXRlVHMgKyBjb29raWVUaW1lb3V0IC0gbm93VHM7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmlzaXRvckNvb2tpZVRpbWVvdXQoIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKSApO1xuICAgIH1dKTtcbiAgICAvLy0tZmluIGFqb3V0IGNuaWxcbiAgICBfcGFxLnB1c2goWyd0cmFja1BhZ2VWaWV3J10pO1xuICAgIF9wYXEucHVzaChbJ2VuYWJsZUxpbmtUcmFja2luZyddKTtcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB1PW1hdG9tby51cmw7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFRyYWNrZXJVcmwnLCB1KydtYXRvbW8ucGhwJ10pO1xuICAgICAgICBfcGFxLnB1c2goWydzZXRTaXRlSWQnLCBtYXRvbW8uc2l0ZUlkXSk7XG4gICAgICAgIHZhciBkPWRvY3VtZW50LCBnPWQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XG4gICAgICAgIGcudHlwZT0ndGV4dC9qYXZhc2NyaXB0JzsgZy5hc3luYz10cnVlOyBnLnNyYz11KydtYXRvbW8uanMnOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGcscyk7XG4gICAgfSkoKTtcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXogb3UgZCd1biBncm91cGUgZGUgcXVpenNcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICAgICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkYXRhcy5Hcm91cElkPWFuc3dlci5Hcm91cElkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9ncm91cEVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJjb25maWdVc2VycyIsImJ0blN1Ym1pdCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZSZXNwb25zZSIsImVtYWlsSW5wdXQiLCJteUZvcm0iLCJpbml0aWFsaXNlIiwiaXNDb25uZWN0ZWQiLCJjaGVja1Nlc3Npb24iLCJ1c2VyIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJsb2FkTWF0b21vIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwic3R5bGUiLCJkaXNwbGF5IiwiZSIsImFkZEVsZW1lbnQiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWxsb0RldiIsImFkZEV2ZW50TGlzdGVuZXIiLCJpbm5lckhUTUwiLCJlbWFpbFZhbHVlIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsImZyZWUiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiZGF0YXMiLCJlbWFpbFRlc3QiLCJzZW5kIiwic3RyaW5naWZ5IiwicHJldmVudERlZmF1bHQiLCJtZXNzYWdlIiwicmVtb3ZlTG9jYWx5IiwiZXJyb3JzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwidGltZURpZmZlcmVuY2UiLCJnZXRUaW1lRGlmZmVyZW5jZSIsImNoZWNrQW5zd2VyRGF0YXMiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJhcHBlbmRDaGlsZCIsImxvZyIsImxpbmsiLCJob21lUGFnZSIsImlucHV0c0NvbmYiLCJlbGVtZW50cyIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllIiwiZW50cmllcyIsImVtcHlGb3JtIiwidHlwZSIsImNoZWNrZWQiLCJlbXB5QW5kSGlkZUZvcm0iLCJfcGFxIiwid2luZG93IiwicHVzaCIsInNlbGYiLCJnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0Iiwibm93Iiwibm93VHMiLCJyb3VuZCIsImdldFRpbWUiLCJ2aXNpdG9ySW5mbyIsImdldFZpc2l0b3JJbmZvIiwiY3JlYXRlVHMiLCJwYXJzZUludCIsImNvb2tpZVRpbWVvdXQiLCJvcmlnaW5hbFRpbWVvdXQiLCJzZXRWaXNpdG9yQ29va2llVGltZW91dCIsInUiLCJkIiwiZyIsInMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJsb2NhdGlvbiIsImluZGV4T2YiLCJhc3NpZ24iLCJv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QUFELENBQVo7QUFDQXdGLHdCQUFZLENBQUNOLGNBQUQsRUFBaUJuRixPQUFqQixFQUEwQm9GLFNBQTFCLENBQVo7QUFDQUUsbUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLFNBNUNEOztBQTZDQXpHLFdBQUcsQ0FBQ3FILE9BQUosR0FBYyxNQUFNWCxNQUFNLENBQUMxRyxHQUFHLENBQUNzSCxVQUFMLENBQTFCOztBQUNBdEgsV0FBRyxDQUFDZ0IsSUFBSjtBQUNIO0FBQ0o7QUFDSixHQXRFTSxDQUFQO0FBdUVILENBekVNLEMsQ0EwRVA7O0FBQ0EsTUFBTTRGLFlBQVksR0FBRyxDQUFDTixjQUFELEVBQWlCbkYsT0FBakIsRUFBMEJvRixTQUExQixLQUNyQjtBQUNJLE1BQUcsQ0FBQ3hOLDJEQUFPLENBQUNvSSxPQUFELENBQVgsRUFDSVMsb0VBQVUsQ0FBQyxTQUFELEVBQVlULE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ3BJLDJEQUFPLENBQUN3TixTQUFELENBQVgsRUFDSTNFLG9FQUFVLENBQUMsS0FBRCxFQUFRMkUsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDeE4sMkRBQU8sQ0FBQ3VOLGNBQUQsQ0FBWCxFQUNJdEMsTUFBTSxDQUFDa0QsUUFBUCxDQUFnQkUsTUFBaEIsQ0FBdUJkLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvZ3JvdXBFbGVtZW50LmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2dyb3VwRWxlbWVudC5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCIvLyBTaSBub24gdXRpbGlzw6ksIHN1cHByaW1lciBsJ2FwcGVsIGRlcyBKUyBmcm9udC1lbmQgcHVpcyByZWNvbXBpbGVyLlxuLy8gUmV2b2lyIGNvbW1lbnQgcsOpb3JnYW5pc2VyIGNlbGEgc291cy1mb3JtZSBkZSBtb2R1bGUgaW5kw6lwZW5kYW50LlxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIFN0YXRzIE1hdG9tbyA6XG4gICAgbWF0b21vOiB7IHVybDogXCJodHRwczovL3N0YXRzLmxlLWZhYi1sYWIuY29tL1wiLCBzaXRlSWQ6IFwiNVwiIH0sXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBQQUdFIEFGRklDSEFOVCBMJ8OJTMOJTUVOVCBEJ1VOIEdST1VQRSBERSBRVUlaIEVUIFBST1BPU0FOVCBERSBDUsOJRVIgU09OIENPTVBURSBERSBNQU5Jw4hSRSBTSU1QTElGScOJRVxuXG4vLy8gTCd1dGlsaXNhdGV1ciBwZXV0IGF2b2lyIHLDqXBvbmR1IMOgIHVuIHF1aXogYXZhbnQgZGUgbGFuY2VyIGxhIGNyw6lhdGlvbiBkZSBzb24gY29tcHRlXG4vLy8gRGFucyBjZSBjYXMgaWwgZmF1dCBlbnJlZ2lzdHJlciBzb24gcsOpc3VsdGF0IGVuIG3Dqm1lIHRlbXBzIHF1ZSBsZXMgaW5mb3JtYXRpb25zIGRlIHNvbiBjb21wdGVcblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIHRpcsOpcyBkdSBiYWNrZW5kIDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpOy8vIGJlc29pbiBkZSB0b3V0ZXMgbGVzIGTDqWNsYXJhdGlvbnMsIGNhciBhcHBlbCBkeW5hbWlxdWUgOiBjb25maWdUZW1wbGF0ZVtob21lUGFnZV1cbmNvbnN0IGNvbmZpZ1VzZXJzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTsvLyBpZGVtIHBvdXIgY29uZmlndXJlciBmb3JtdWxhaXJlXG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldERhdGFzRnJvbUlucHV0cywgc2V0QXR0cmlidXRlc1RvSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGxvYWRNYXRvbW8gfSBmcm9tIFwiLi90b29scy9tYXRvbW8uanNcIjtcbmltcG9ydCB7IGNoZWNrQW5zd2VyRGF0YXMsIGNoZWNrU2Vzc2lvbiwgZ2V0VGltZURpZmZlcmVuY2UgfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHsgc2VydmVyRXJyb3IgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHsgbmVlZFVuaXF1ZUVtYWlsIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBidG5TdWJtaXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdWJtaXREYXRhc1wiKTtcbmNvbnN0IGRpdlJlc3BvbnNlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5jb25zdCBlbWFpbElucHV0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZW1haWxcIik7XG5jb25zdCBteUZvcm09ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdWJzY3JpcHRpb25cIik7XG5cbi8vIFRlc3QgZGUgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgKyBhZmZpY2hhZ2UgZm9ybXVsYWlyZSBkJ2luc2NyaXB0aW9uIDpcbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgbGV0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbigpLCB1c2VyO1xuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKTsvLyBsaWVuIHZlcnMgbGUgY29tcHRlIGFkYXB0w6kgcG91ciBsZXMgdXRpbGlzYXRldXJzIGNvbm5lY3TDqXNcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxvYWRNYXRvbW8oKTtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdVc2VycywgbXlGb3JtKTtcbiAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpO1xuaGVsbG9EZXYoKTtcblxuLy8gVGVzdCBzaSBsJ2UtbWFpbCBzYWlzaSBlc3QgZMOpasOgIHV0aWxpc8OpIHBhciB1biBhdXRyZSBjb21wdGUuXG4vLyBTaSBjJ2VzdCBsZSBjYXMsIGxhIHZhbGlkYXRpb24gZHUgZm9ybXVsYWlyZSBlc3QgYmxvcXXDqWUuXG5lbWFpbElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmdW5jdGlvbihlKVxue1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZW1haWxNZXNzYWdlXCIpLmlubmVySFRNTD1cIlwiOy8vIHBvdXIgc3VwcHJpbWVyIGwnw6l2ZW50dWVsIG1lc3NhZ2UgZCdlcnJldXIgZMOpasOgIGFmZmljaMOpXG59KTtcbmVtYWlsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgZnVuY3Rpb24oZSlcbntcbiAgICBjb25zdCBlbWFpbFZhbHVlPWVtYWlsSW5wdXQudmFsdWUudHJpbSgpO1xuICAgIGlmKGVtYWlsVmFsdWUhPT1cIlwiKVxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5jaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuZnJlZSAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLmZyZWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVtYWlsTWVzc2FnZVwiKSwgXCJkaXZcIiwgbmVlZFVuaXF1ZUVtYWlsLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICBidG5TdWJtaXQuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgY29uc3QgZGF0YXM9eyBlbWFpbFRlc3Q6ZW1haWxWYWx1ZSB9O1xuICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgIH1cbn0pO1xuXG4vLyBUcmFpdGVtZW50IGRlIGwnZW52b2kgZGVzIGRvbm7DqWVzIGQnaW5zY3JpcHRpb24gOlxubXlGb3JtLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgICAgICAgIFxuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLnN1YnNjcmliZVJvdXRlKTtcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcImxhc3RBbnN3ZXJcIik7Ly8gISEgaW1wb3J0YW50LCBwb3VyIG5lIHBhcyBlbnJlZ2lzdGVyIHBsdXNpZXVycyBmb2lzIGxlIHLDqXN1bHRhdC5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSBzZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhteUZvcm0pO1xuICAgICAgICBpZihkYXRhcylcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMudGltZURpZmZlcmVuY2U9Z2V0VGltZURpZmZlcmVuY2UoY29uZmlnVXNlcnMpO1xuICAgICAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBhIHByw6ljw6lkZW1lbnQgcsOpcG9uZHUgw6AgdW4gcXVpeiwgb24gYWpvdXRlIGxlcyBkb25uw6llcyBkZSBzb24gcsOpc3VsdGF0IDpcbiAgICAgICAgICAgIGRhdGFzPWNoZWNrQW5zd2VyRGF0YXMoZGF0YXMpO1xuICAgICAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufSk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/homeManager.app.js b/front/public/JS/homeManager.app.js index 3e08db6..38e894d 100644 --- a/front/public/JS/homeManager.app.js +++ b/front/public/JS/homeManager.app.js @@ -527,9 +527,9 @@ module.exports = { correctAnswerTxt: "Bonne réponse", estimatedTime: "Durée de lecture estimée : ", estimatedTimeOption: { - short: "courte", + "short": "courte", medium: "moyenne", - long: "longue" + "long": "longue" }, explanationBeforeTxt: "Extrait :", haveBeenPublished: ":NB nouveaux questionnaires ont été publiés.", @@ -1046,10 +1046,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- PAGE D'ACCUEIL POUR LES GESTIONNAIRES /// Vérifie que l'utilisateur est bien connecté, a le bon statut et le redirige vers le formulaire d'inscription si ce n'est pas le cas. /// Si c'est ok, on récupère les stats générales et des dernières 24H et les affiche @@ -1059,11 +1055,11 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Temporairement, c'est ici aussi que l'on peut régénérer tout le HTML -> à terme dans homeAdmin ! // Fichier de configuration côté client : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions utiles au script : +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions utiles au script : @@ -1072,155 +1068,131 @@ var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - notAllowed = _require.notAllowed, - serverError = _require.serverError, - statsAdmin = _require.statsAdmin; +const { + notAllowed, + serverError, + statsAdmin +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/questionnaire$")("./" + lang + "/questionnaire"), - nextDateWithoutQuestionnaire = _require2.nextDateWithoutQuestionnaire, - nextQuestionnairesList = _require2.nextQuestionnairesList, - questionnaireNeedBeCompleted = _require2.questionnaireNeedBeCompleted; +const { + nextDateWithoutQuestionnaire, + nextQuestionnairesList, + questionnaireNeedBeCompleted +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/questionnaire$")("./" + lang + "/questionnaire"); -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - welcomeMessage = _require3.welcomeMessage; // Principaux éléments du DOM manipulés : +const { + welcomeMessage +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); // Principaux éléments du DOM manipulés : -var divMain = document.getElementById("main-content"); -var divCrash = document.getElementById("crash"); -var divMessage = document.getElementById("message"); -var divQuestionnaires = document.getElementById("questionnaires"); -var btnRegenerate = document.getElementById("wantRegenerate"); +const divMain = document.getElementById("main-content"); +const divCrash = document.getElementById("crash"); +const divMessage = document.getElementById("message"); +const divQuestionnaires = document.getElementById("questionnaires"); +const btnRegenerate = document.getElementById("wantRegenerate"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_5__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, xhrStats, xhrNextQuestionnaires; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["checkSession"])(["manager", "admin"], "/" + configTemplate.connectionPage, { - message: notAllowed, - color: "error" - }); +const initialise = async () => { + try { + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["checkSession"])(["manager", "admin"], "/" + configTemplate.connectionPage, { + message: notAllowed, + color: "error" + }); - case 3: - isConnected = _context.sent; + if (isConnected) { + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_5__["updateAccountLink"])(user.status, configTemplate); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "h2", welcomeMessage.replace("#NAME", user.name)); + divMain.style.display = "block"; - if (isConnected) { - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_5__["updateAccountLink"])(user.status, configTemplate); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "h2", welcomeMessage.replace("#NAME", user.name)); - divMain.style.display = "block"; - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["getLocaly"])("message"))) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["getLocaly"])("message", true).color], "", false); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["removeLocaly"])("message"); - } // Les stats sur les comptes utilisateurs : + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["getLocaly"])("message"))) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["getLocaly"])("message", true).color], "", false); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["removeLocaly"])("message"); + } // Les stats sur les comptes utilisateurs : - xhrStats = new XMLHttpRequest(); - xhrStats.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["getAdminStats"]); + const xhrStats = new XMLHttpRequest(); + xhrStats.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["getAdminStats"]); - xhrStats.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + xhrStats.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - if (this.status === 200) { - var mapText = { - NB_USERS_24H: response.nbNewUsers24H, - NB_SUBSCRIPTIONS_24H: response.Subscriptions.nbSubscriptions24H, - NB_USERS_DELETED_24H: response.nbDeletedUsers24H, - NB_ANSWERS_24H: response.Answers.nbAnswers24H, - NB_USERS_TOT: response.nbNewUsersTot, - NB_SUBSCRIPTIONS_TOT: response.Subscriptions.nbSubscriptionsTot, - NB_SUBSCRIPTIONS_PREMIUM: response.Subscriptions.nbSubscriptionsPremium, - NB_ANSWERS_TOT: response.Answers.nbAnswersTot, - NB_USERS_DELETED_TOT: response.nbDeletedUsersTot, - NB_USERS_DELETED_VALIDED: response.nbDeletedUsersWasValided, - NB_USERS_DELETED_PREMIUM: response.nbDeletedUsersTotWasPremium - }; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "p", Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["replaceAll"])(statsAdmin, mapText), "", "", "", false); - } - } - }; + if (this.status === 200) { + const mapText = { + NB_USERS_24H: response.nbNewUsers24H, + NB_SUBSCRIPTIONS_24H: response.Subscriptions.nbSubscriptions24H, + NB_USERS_DELETED_24H: response.nbDeletedUsers24H, + NB_ANSWERS_24H: response.Answers.nbAnswers24H, + NB_USERS_TOT: response.nbNewUsersTot, + NB_SUBSCRIPTIONS_TOT: response.Subscriptions.nbSubscriptionsTot, + NB_SUBSCRIPTIONS_PREMIUM: response.Subscriptions.nbSubscriptionsPremium, + NB_ANSWERS_TOT: response.Answers.nbAnswersTot, + NB_USERS_DELETED_TOT: response.nbDeletedUsersTot, + NB_USERS_DELETED_VALIDED: response.nbDeletedUsersWasValided, + NB_USERS_DELETED_PREMIUM: response.nbDeletedUsersTotWasPremium + }; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "p", Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["replaceAll"])(statsAdmin, mapText), "", "", "", false); + } + } + }; - xhrStats.setRequestHeader("Authorization", "Bearer " + user.token); - xhrStats.send(); // Les questionnaires bientôt publiés : + xhrStats.setRequestHeader("Authorization", "Bearer " + user.token); + xhrStats.send(); // Les questionnaires bientôt publiés : - xhrNextQuestionnaires = new XMLHttpRequest(); - xhrNextQuestionnaires.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_2__["questionnaireRoutes"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_2__["getListNextQuestionnaires"]); + const xhrNextQuestionnaires = new XMLHttpRequest(); + xhrNextQuestionnaires.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_2__["questionnaireRoutes"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_2__["getListNextQuestionnaires"]); - xhrNextQuestionnaires.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + xhrNextQuestionnaires.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - if (this.status === 200 && Array.isArray(response.questionnaires)) { - var listHTML = "", - dayStr, - optionsDayStr = { - weekday: 'long' - }; + if (this.status === 200 && Array.isArray(response.questionnaires)) { + let listHTML = "", + dayStr, + optionsDayStr = { + weekday: 'long' + }; - for (var i in response.questionnaires) { - dayStr = new Intl.DateTimeFormat(lang, optionsDayStr).format(new Date(response.questionnaires[i].datePublishing)); - listHTML += "
  • " + dayStr + " " + Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["dateFormat"])(response.questionnaires[i].datePublishing, _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]) + ": " + response.questionnaires[i].title + ""; - if (response.questionnaires[i].isPublishable === false) listHTML += " (" + questionnaireNeedBeCompleted + ")
  • "; - listHTML += ""; - } - - if (response.questionnaires.length !== 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divQuestionnaires, "h2", nextQuestionnairesList.replace("#NB", response.questionnaires.length)); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divQuestionnaires, "h4", nextDateWithoutQuestionnaire + Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["dateFormat"])(response.dateNeeded, _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]), "", ["info"], "", false); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divQuestionnaires, "ul", listHTML, "", "", "", false); - } - } - }; - - xhrNextQuestionnaires.setRequestHeader("Authorization", "Bearer " + user.token); - xhrNextQuestionnaires.send(); // Traitement demande régénérer HTML - - btnRegenerate.addEventListener("click", function (e) { - e.preventDefault(); - var xhrRegenerate = new XMLHttpRequest(); - xhrRegenerate.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_2__["questionnaireRoutes"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_2__["regenerateHTML"]); - - xhrRegenerate.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - if (this.status === 200 && response.message != undefined) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "p", response.message, "", ["success"], "", false);else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "p", serverError, "", ["error"], "", false); - } - }; - - xhrRegenerate.setRequestHeader("Content-Type", "application/json"); - xhrRegenerate.setRequestHeader("Authorization", "Bearer " + user.token); - xhrRegenerate.send(); - }); + for (let i in response.questionnaires) { + dayStr = new Intl.DateTimeFormat(lang, optionsDayStr).format(new Date(response.questionnaires[i].datePublishing)); + listHTML += "
  • " + dayStr + " " + Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["dateFormat"])(response.questionnaires[i].datePublishing, _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]) + ": " + response.questionnaires[i].title + ""; + if (response.questionnaires[i].isPublishable === false) listHTML += " (" + questionnaireNeedBeCompleted + ")
  • "; + listHTML += ""; } - _context.next = 11; - break; - - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divCrash, "p", serverError, "", ["error"]); - console.error(_context.t0); - - case 11: - case "end": - return _context.stop(); + if (response.questionnaires.length !== 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divQuestionnaires, "h2", nextQuestionnairesList.replace("#NB", response.questionnaires.length)); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divQuestionnaires, "h4", nextDateWithoutQuestionnaire + Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["dateFormat"])(response.dateNeeded, _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]), "", ["info"], "", false); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divQuestionnaires, "ul", listHTML, "", "", "", false); + } } - } - }, _callee, null, [[0, 7]]); - })); + }; - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + xhrNextQuestionnaires.setRequestHeader("Authorization", "Bearer " + user.token); + xhrNextQuestionnaires.send(); // Traitement demande régénérer HTML + + btnRegenerate.addEventListener("click", function (e) { + e.preventDefault(); + const xhrRegenerate = new XMLHttpRequest(); + xhrRegenerate.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_2__["questionnaireRoutes"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_2__["regenerateHTML"]); + + xhrRegenerate.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + if (this.status === 200 && response.message != undefined) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "p", response.message, "", ["success"], "", false);else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divMessage, "p", serverError, "", ["error"], "", false); + } + }; + + xhrRegenerate.setRequestHeader("Content-Type", "application/json"); + xhrRegenerate.setRequestHeader("Authorization", "Bearer " + user.token); + xhrRegenerate.send(); + }); + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_4__["addElement"])(divCrash, "p", serverError, "", ["error"]); + console.error(e); + } +}; initialise(); @@ -1240,14 +1212,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1265,32 +1236,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1314,13 +1274,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1346,27 +1306,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1375,11 +1331,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1393,96 +1349,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1491,4 +1419,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmUkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9tZU1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImJ0blNlbmRSZXNwb25zZSIsImJ0blNoYXJlUXVpelR4dCIsImJ0blNoYXJlUXVpek1haWxCb2R5IiwiYnRuU2hvd1F1ZXN0aW9ubmFpcmUiLCJjb3JyZWN0QW5zd2VyVHh0IiwiZXN0aW1hdGVkVGltZSIsImVzdGltYXRlZFRpbWVPcHRpb24iLCJzaG9ydCIsIm1lZGl1bSIsImxvbmciLCJleHBsYW5hdGlvbkJlZm9yZVR4dCIsImhhdmVCZWVuUHVibGlzaGVkIiwiaGF2ZUJlZW5SZWdlbmVyYXRlZCIsImxhc3RVcGRhdGVkIiwibGlua0dvVG9OZXh0RWxlbWVudCIsImxpbmtHb1RvUXVpeiIsIm5lZWRDb3JyZWN0UHVibGlzaGluZ0RhdGUiLCJuZWVkRXN0aW1hdGVkVGltZSIsIm5lZWRHcm91cElmUmFuayIsIm5lZWRJbnRyb2R1Y3Rpb24iLCJuZWVkS25vd0lmSXNQdWJsaXNoZWQiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkTm90VG9vTG9uZ1RpdGxlIiwibmVlZE51bWJlckZvclJhbmsiLCJuZWVkVGl0bGUiLCJuZWVkVW5pcXVlVXJsIiwibmVlZFVybCIsIm5leHREYXRlV2l0aG91dFF1ZXN0aW9ubmFpcmUiLCJuZXh0UXVlc3Rpb25uYWlyZXNMaXN0IiwicXVlc3Rpb25uYWlyZXNOYW1lIiwicXVlc3Rpb25uYWlyZU5lZWRCZUNvbXBsZXRlZCIsInB1Ymxpc2hlZEF0IiwicHVibGlzaGVkQnkiLCJzZWFyY2hRdWVzdGlvbm5haXJlUmVzdWx0VGl0bGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlV2l0aE5vUmVzdWx0Iiwic2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhSZXN1bHQiLCJ3cm9uZ0Fuc3dlclR4dCIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJkaXZNYWluIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdkNyYXNoIiwiZGl2TWVzc2FnZSIsImRpdlF1ZXN0aW9ubmFpcmVzIiwiYnRuUmVnZW5lcmF0ZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImNoZWNrU2Vzc2lvbiIsIm1lc3NhZ2UiLCJjb2xvciIsImlzQ29ubmVjdGVkIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwiYWRkRWxlbWVudCIsInN0eWxlIiwiZGlzcGxheSIsInJlbW92ZUxvY2FseSIsInhoclN0YXRzIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIm1hcFRleHQiLCJOQl9VU0VSU18yNEgiLCJuYk5ld1VzZXJzMjRIIiwiTkJfU1VCU0NSSVBUSU9OU18yNEgiLCJTdWJzY3JpcHRpb25zIiwibmJTdWJzY3JpcHRpb25zMjRIIiwiTkJfVVNFUlNfREVMRVRFRF8yNEgiLCJuYkRlbGV0ZWRVc2VyczI0SCIsIk5CX0FOU1dFUlNfMjRIIiwiQW5zd2VycyIsIm5iQW5zd2VyczI0SCIsIk5CX1VTRVJTX1RPVCIsIm5iTmV3VXNlcnNUb3QiLCJOQl9TVUJTQ1JJUFRJT05TX1RPVCIsIm5iU3Vic2NyaXB0aW9uc1RvdCIsIk5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSIsIm5iU3Vic2NyaXB0aW9uc1ByZW1pdW0iLCJOQl9BTlNXRVJTX1RPVCIsIm5iQW5zd2Vyc1RvdCIsIk5CX1VTRVJTX0RFTEVURURfVE9UIiwibmJEZWxldGVkVXNlcnNUb3QiLCJOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQiLCJuYkRlbGV0ZWRVc2Vyc1dhc1ZhbGlkZWQiLCJOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0iLCJuYkRlbGV0ZWRVc2Vyc1RvdFdhc1ByZW1pdW0iLCJyZXBsYWNlQWxsIiwic2V0UmVxdWVzdEhlYWRlciIsInRva2VuIiwic2VuZCIsInhock5leHRRdWVzdGlvbm5haXJlcyIsIkFycmF5IiwiaXNBcnJheSIsImxpc3RIVE1MIiwiZGF5U3RyIiwib3B0aW9uc0RheVN0ciIsIndlZWtkYXkiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJmb3JtYXQiLCJkYXRlUHVibGlzaGluZyIsImRhdGVGb3JtYXQiLCJpc1B1Ymxpc2hhYmxlIiwiZGF0ZU5lZWRlZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJ4aHJSZWdlbmVyYXRlIiwiY29uc29sZSIsImVycm9yIiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJsaW5rIiwiaG9tZVBhZ2UiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJuYlF1ZXN0aW9ucyIsIlF1ZXN0aW9ubmFpcmVJZCIsIkdyb3VwSWQiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwibm93IiwieGhyIiwib25sb2FkIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImluZGV4T2YiLCJhc3NpZ24iLCJvbmVycm9yIiwic3RhdHVzVGV4dCJdLCJtYXBwaW5ncyI6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LENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBSyxxQkFBRyxDQUFDVyxPQUFKLEdBQWM7QUFBQSwyQkFBTWYsTUFBTSxDQUFDSSxHQUFHLENBQUNZLFVBQUwsQ0FBWjtBQUFBLG1CQUFkOztBQUNBWixxQkFBRyxDQUFDdEUsSUFBSjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFabEQsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU1zSCxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDTixjQUFELEVBQWlCL0csT0FBakIsRUFBMEJnSCxTQUExQixFQUNyQjtBQUNJLE1BQUcsQ0FBQ2pOLDJEQUFPLENBQUNpRyxPQUFELENBQVgsRUFDSXNFLG9FQUFVLENBQUMsU0FBRCxFQUFZdEUsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDakcsMkRBQU8sQ0FBQ2lOLFNBQUQsQ0FBWCxFQUNJMUMsb0VBQVUsQ0FBQyxLQUFELEVBQVEwQyxTQUFSLENBQVY7QUFDSixNQUFHLENBQUNqTiwyREFBTyxDQUFDZ04sY0FBRCxDQUFYLEVBQ0llLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkUsTUFBaEIsQ0FBdUJsQixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2hvbWVNYW5hZ2VyLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2hvbWVNYW5hZ2VyLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9xdWVzdGlvbm5haXJlXCI6IFwiLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvcXVlc3Rpb25uYWlyZSRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLC8vIGTDqXBsYWPDqSBkYW5zIGdlbmVyYWwuanNcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsLy9pZGVtXG4gICAgYnRuU2VuZFJlc3BvbnNlOiBcIlRlc3RleiB2b3MgcsOpcG9uc2VzLlwiLFxuICAgIGJ0blNoYXJlUXVpelR4dDogXCJQYXJ0YWdlciB2aWEgXCIsXG4gICAgYnRuU2hhcmVRdWl6TWFpbEJvZHk6IFwiQm9uam91ciwlMEElMEFWb2ljaSUyMHVuJTIwbGllbiUyMGludGVybmV0JTIwcXVpJTIwZGV2cmFpdCUyMHQnaW50w6lyZXNzZXIgOiUwQVwiLCAgICBcbiAgICBidG5TaG93UXVlc3Rpb25uYWlyZTogXCJSw6lwb25kcmUgYXUgcXVpeiAhXCIsXG4gICAgY29ycmVjdEFuc3dlclR4dDogXCJCb25uZSByw6lwb25zZVwiLFxuICAgIGVzdGltYXRlZFRpbWU6IFwiRHVyw6llIGRlIGxlY3R1cmUgZXN0aW3DqWUgOiBcIixcbiAgICBlc3RpbWF0ZWRUaW1lT3B0aW9uIDpcbiAgICB7XG4gICAgICAgIHNob3J0OiBcImNvdXJ0ZVwiLFxuICAgICAgICBtZWRpdW06IFwibW95ZW5uZVwiLFxuICAgICAgICBsb25nOiBcImxvbmd1ZVwiXG4gICAgfSxcbiAgICBleHBsYW5hdGlvbkJlZm9yZVR4dDogXCJFeHRyYWl0IDpcIixcbiAgICBoYXZlQmVlblB1Ymxpc2hlZCA6IFwiOk5CIG5vdXZlYXV4IHF1ZXN0aW9ubmFpcmVzIG9udCDDqXTDqSBwdWJsacOpcy5cIixcbiAgICBoYXZlQmVlblJlZ2VuZXJhdGVkIDogXCJMZXMgcGFnZXMgSFRNTCBkZSAjTkIxIHF1ZXN0aW9ubmFpcmVzIG91IMOpbMOpbWVudHMgZGUgZ3JvdXBlcywgI05CMiBxdWl6cyBncm91cMOpcyBldCAjTkIzIHRow6htZXMgb250IMOpdMOpIHJlZ8OpbsOpcsOpcy5cIixcbiAgICBsYXN0VXBkYXRlZDogXCJEZXJuacOocmUgbWlzZSDDoCBqb3VyLCBsZSBcIixcbiAgICBsaW5rR29Ub05leHRFbGVtZW50OiBcIkFydGljbGUgc3VpdmFudFwiLFxuICAgIGxpbmtHb1RvUXVpejogXCJBY2PDqWRlciBhdSBxdWl6XCIsICAgIFxuICAgIG5lZWRDb3JyZWN0UHVibGlzaGluZ0RhdGU6IFwiTGEgZGF0ZSBkZSBwdWJsaWNhdGlvbiBmb3VybmllIG4nYSBwYXMgdW4gZm9ybWF0IHZhbGlkZS5cIixcbiAgICBuZWVkRXN0aW1hdGVkVGltZTogXCJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIHVuZSBlc3RpbWF0aW9uIGRlIGxhIGR1csOpZSBkZSBjZSBxdWl6LlwiLFxuICAgIG5lZWRHcm91cElmUmFuazogXCJWb3VzIGF2ZXogc2Fpc2kgdW4gcmFuZyBkZSBjbGFzc2VtZW50LCBzYW5zIHPDqWxlY3Rpb25uZXIgbGUgZ3JvdXBlIGR1IHF1aXouXCIsXG4gICAgbmVlZEludHJvZHVjdGlvbjogXCJNZXJjaSBkZSBmb3VybmlyIHVuIHRleHRlIGQnaW50cm9kdWN0aW9uIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZEtub3dJZklzUHVibGlzaGVkOiBcIklsIGZhdXQgc2F2b2lyIHNpIGNlIHF1aXogZXN0IHB1Ymxpw6kuXCIsXG4gICAgbmVlZExhbmd1YWdlOiBcIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBsYSBsYW5ndWUgZGUgY2UgcXVpei5cIixcbiAgICBuZWVkTm90VG9vTG9uZ1RpdGxlOiBcIkxlIHRpdHJlIGR1IHF1aXogbmUgZG9pdCBwYXMgY29tcHRlciBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTnVtYmVyRm9yUmFuazogXCJWb3VzIGRldmV6IHNhaXNpciB1biBub21icmUgZW50aWVyIHBvdXIgbGUgcmFuZyBkZSBjZSBxdWVzdGlvbm5haXJlIGRhbnMgc29uIGdyb3VwZS5cIiwgICAgICAgICAgICAgIFxuICAgIG5lZWRUaXRsZTogXCJNZXJjaSBkZSBmb3VybmlyIHVuIHRpdHJlIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZFVuaXF1ZVVybDogXCJMJ3VybCBkdSBxdWl6IGRvaXQgw6p0cmUgdW5pcXVlLlwiLFxuICAgIG5lZWRVcmw6IFwiTWVyY2kgZGUgZm91cm5pciBsJ3VybCDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5leHREYXRlV2l0aG91dFF1ZXN0aW9ubmFpcmU6IFwiUHJvY2hhaW5lIGRhdGUgc2FucyBxdWl6IHByb2dyYW1tw6kgOiBcIixcbiAgICBuZXh0UXVlc3Rpb25uYWlyZXNMaXN0OiBcIkxlcyAjTkIgcHJvY2hhaW5zIHF1aXpzIGRldmFudCDDqnRyZSBwdWJsacOpc1wiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTmFtZTogXCJxdWl6XCIsXG4gICAgcXVlc3Rpb25uYWlyZU5lZWRCZUNvbXBsZXRlZDogXCJRdWl6IGluY29tcGxldFwiLFxuICAgIHB1Ymxpc2hlZEF0OiBcIiwgbGVcIixcbiAgICBwdWJsaXNoZWRCeTogXCJRdWl6IHB1Ymxpw6kgcGFyXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZVJlc3VsdFRpdGxlIDogXCJSw6lzdWx0YXQgcG91ciB2b3RyZSByZWNoZXJjaGVcIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlV2l0aE5vUmVzdWx0IDogXCJBdWN1biBxdWl6IG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgdm90cmUgcmVjaGVyY2hlLlwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoUmVzdWx0IDogXCJJbCB5IGEgI05CIGFydGljbGUjUyBjb3JyZXNwb25kYW50IMOgIHZvdHJlIHJlY2hlcmNoZSA6XCIsXG4gICAgd3JvbmdBbnN3ZXJUeHQ6IFwiTWF1dmFpc2UgcsOpcG9uc2VcIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBQQUdFIEQnQUNDVUVJTCBQT1VSIExFUyBHRVNUSU9OTkFJUkVTXG5cbi8vLyBWw6lyaWZpZSBxdWUgbCd1dGlsaXNhdGV1ciBlc3QgYmllbiBjb25uZWN0w6ksIGEgbGUgYm9uIHN0YXR1dCBldCBsZSByZWRpcmlnZSB2ZXJzIGxlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbiBzaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLlxuLy8vIFNpIGMnZXN0IG9rLCBvbiByw6ljdXDDqHJlIGxlcyBzdGF0cyBnw6luw6lyYWxlcyBldCBkZXMgZGVybmnDqHJlcyAyNEggZXQgbGVzIGFmZmljaGVcbi8vLyBPbiBsaXN0ZSBlbnN1aXRlIGxlcyBwcm9jaGFpbnMgcXVpenMgZGV2YW50IMOqdHJlIHB1Ymxpw6lzIGVuIGZhaXNhbnQgcmVzc29ydGlyIGNldXggZGV2YW50IMOqdHJlIGNvbXBsw6l0w6lzICsgbGEgcHJvY2hhaW5lIGRhdGUgc2FucyBxdWl6XG4vLy8gVW4gbWVudSBwZXJtZXQgw6AgbCd1dGlsaXNhdGV1ciBkJ2FjY8OpZGVyIGF1eCBmb3JtdWxhaXJlcyBwZXJtZXR0YW50IGRlIGfDqXJlciBsZXMgcXVpenMgZXQgbGVzIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGV0IGFib25uZW1lbnRzXG4vLy8gVW4gbWVzc2FnZSB2ZW5hbnQgZCd1bmUgYXV0cmUgcGFnZSBwZXV0IGF1c3NpIMOqdHJlIMOgIGFmZmljaGVyIGxvcnMgZHUgcHJlbWllciBjaGFyZ2VtZW50LlxuXG4vLy8gVGVtcG9yYWlyZW1lbnQsIGMnZXN0IGljaSBhdXNzaSBxdWUgbCdvbiBwZXV0IHLDqWfDqW7DqXJlciB0b3V0IGxlIEhUTUwgLT4gw6AgdGVybWUgZGFucyBob21lQWRtaW4gIVxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmltcG9ydCB7IGdldEFkbWluU3RhdHMsIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5pbXBvcnQgeyBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzLCBxdWVzdGlvbm5haXJlUm91dGVzLCByZWdlbmVyYXRlSFRNTCB9IGZyb20gXCIuLi8uLi9jb25maWcvcXVlc3Rpb25uYWlyZXMuanNcIjtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB7IG5vdEFsbG93ZWQsIHNlcnZlckVycm9yLCBzdGF0c0FkbWluIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IG5leHREYXRlV2l0aG91dFF1ZXN0aW9ubmFpcmUsIG5leHRRdWVzdGlvbm5haXJlc0xpc3QsIHF1ZXN0aW9ubmFpcmVOZWVkQmVDb21wbGV0ZWQgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvcXVlc3Rpb25uYWlyZVwiKTtcbmNvbnN0IHsgd2VsY29tZU1lc3NhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGRpdk1haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4tY29udGVudFwiKTtcbmNvbnN0IGRpdkNyYXNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmFzaFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZRdWVzdGlvbm5haXJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZXNcIik7XG5jb25zdCBidG5SZWdlbmVyYXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ3YW50UmVnZW5lcmF0ZVwiKTtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAgeyAgICAgICAgXG4gICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihbXCJtYW5hZ2VyXCIsIFwiYWRtaW5cIl0sIFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IG5vdEFsbG93ZWQsIGNvbG9yOlwiZXJyb3JcIiB9KTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdUZW1wbGF0ZSk7XG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwiaDJcIiwgd2VsY29tZU1lc3NhZ2UucmVwbGFjZShcIiNOQU1FXCIsIHVzZXIubmFtZSkpO1xuICAgICAgICAgICAgZGl2TWFpbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGdldExvY2FseShcIm1lc3NhZ2VcIikpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIGdldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkubWVzc2FnZSwgXCJcIiwgW2dldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkuY29sb3JdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIExlcyBzdGF0cyBzdXIgbGVzIGNvbXB0ZXMgdXRpbGlzYXRldXJzIDpcbiAgICAgICAgICAgIGNvbnN0IHhoclN0YXRzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHJTdGF0cy5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2dldEFkbWluU3RhdHMpO1xuICAgICAgICAgICAgeGhyU3RhdHMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcFRleHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTXzI0SCA6IHJlc3BvbnNlLm5iTmV3VXNlcnMyNEgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfU1VCU0NSSVBUSU9OU18yNEggOiByZXNwb25zZS5TdWJzY3JpcHRpb25zLm5iU3Vic2NyaXB0aW9uczI0SCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9VU0VSU19ERUxFVEVEXzI0SCA6IHJlc3BvbnNlLm5iRGVsZXRlZFVzZXJzMjRILFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX0FOU1dFUlNfMjRIIDogcmVzcG9uc2UuQW5zd2Vycy5uYkFuc3dlcnMyNEgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfVVNFUlNfVE9UIDogcmVzcG9uc2UubmJOZXdVc2Vyc1RvdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9TVUJTQ1JJUFRJT05TX1RPVCA6IHJlc3BvbnNlLlN1YnNjcmlwdGlvbnMubmJTdWJzY3JpcHRpb25zVG90LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSA6IHJlc3BvbnNlLlN1YnNjcmlwdGlvbnMubmJTdWJzY3JpcHRpb25zUHJlbWl1bSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9BTlNXRVJTX1RPVCA6IHJlc3BvbnNlLkFuc3dlcnMubmJBbnN3ZXJzVG90LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTX0RFTEVURURfVE9UIDogcmVzcG9uc2UubmJEZWxldGVkVXNlcnNUb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIDogcmVzcG9uc2UubmJEZWxldGVkVXNlcnNXYXNWYWxpZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSA6IHJlc3BvbnNlLm5iRGVsZXRlZFVzZXJzVG90V2FzUHJlbWl1bVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHJlcGxhY2VBbGwoc3RhdHNBZG1pbiwgbWFwVGV4dCksIFwiXCIsIFwiXCIsIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhoclN0YXRzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgIHhoclN0YXRzLnNlbmQoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gTGVzIHF1ZXN0aW9ubmFpcmVzIGJpZW50w7R0IHB1Ymxpw6lzIDogICAgICBcbiAgICAgICAgICAgIGNvbnN0IHhock5leHRRdWVzdGlvbm5haXJlcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3F1ZXN0aW9ubmFpcmVSb3V0ZXMrZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyk7XG4gICAgICAgICAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZS5xdWVzdGlvbm5haXJlcykpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaXN0SFRNTD1cIlwiLCBkYXlTdHIsIG9wdGlvbnNEYXlTdHIgPSB7IHdlZWtkYXk6ICdsb25nJ307XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UucXVlc3Rpb25uYWlyZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF5U3RyPW5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxhbmcsIG9wdGlvbnNEYXlTdHIpLmZvcm1hdChuZXcgRGF0ZShyZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5kYXRlUHVibGlzaGluZykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIjxsaT5cIitkYXlTdHIrXCIgXCIrZGF0ZUZvcm1hdChyZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5kYXRlUHVibGlzaGluZywgYXZhaWxhYmxlTGFuZ3NbMF0pK1wiOiA8YSBocmVmPSdcIitjb25maWdUZW1wbGF0ZS5xdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlK1wiP2lkPVwiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmlkK1wiJz5cIityZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS50aXRsZStcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pc1B1Ymxpc2hhYmxlPT09ZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIiA8c3BhbiBjbGFzcz0nZXJyb3InPihcIitxdWVzdGlvbm5haXJlTmVlZEJlQ29tcGxldGVkK1wiKTwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEhUTUwrPVwiPC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCE9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbm5haXJlcywgXCJoMlwiLCBuZXh0UXVlc3Rpb25uYWlyZXNMaXN0LnJlcGxhY2UoXCIjTkJcIiwgcmVzcG9uc2UucXVlc3Rpb25uYWlyZXMubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcImg0XCIsIG5leHREYXRlV2l0aG91dFF1ZXN0aW9ubmFpcmUrZGF0ZUZvcm1hdChyZXNwb25zZS5kYXRlTmVlZGVkLCBhdmFpbGFibGVMYW5nc1swXSksIFwiXCIsIFtcImluZm9cIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25uYWlyZXMsIFwidWxcIiwgbGlzdEhUTUwsIFwiXCIsIFwiXCIsIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhock5leHRRdWVzdGlvbm5haXJlcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTsgXG4gICAgICAgICAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMuc2VuZCgpO1xuXG4gICAgICAgICAgICAvLyBUcmFpdGVtZW50IGRlbWFuZGUgcsOpZ8OpbsOpcmVyIEhUTUxcbiAgICAgICAgICAgIGJ0blJlZ2VuZXJhdGUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHhoclJlZ2VuZXJhdGUgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHJSZWdlbmVyYXRlLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3F1ZXN0aW9ubmFpcmVSb3V0ZXMrcmVnZW5lcmF0ZUhUTUwpO1xuICAgICAgICAgICAgICAgIHhoclJlZ2VuZXJhdGUub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoclJlZ2VuZXJhdGUuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgeGhyUmVnZW5lcmF0ZS5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHJSZWdlbmVyYXRlLnNlbmQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZDcmFzaCwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmUkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9tZU1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImJ0blNlbmRSZXNwb25zZSIsImJ0blNoYXJlUXVpelR4dCIsImJ0blNoYXJlUXVpek1haWxCb2R5IiwiYnRuU2hvd1F1ZXN0aW9ubmFpcmUiLCJjb3JyZWN0QW5zd2VyVHh0IiwiZXN0aW1hdGVkVGltZSIsImVzdGltYXRlZFRpbWVPcHRpb24iLCJtZWRpdW0iLCJleHBsYW5hdGlvbkJlZm9yZVR4dCIsImhhdmVCZWVuUHVibGlzaGVkIiwiaGF2ZUJlZW5SZWdlbmVyYXRlZCIsImxhc3RVcGRhdGVkIiwibGlua0dvVG9OZXh0RWxlbWVudCIsImxpbmtHb1RvUXVpeiIsIm5lZWRDb3JyZWN0UHVibGlzaGluZ0RhdGUiLCJuZWVkRXN0aW1hdGVkVGltZSIsIm5lZWRHcm91cElmUmFuayIsIm5lZWRJbnRyb2R1Y3Rpb24iLCJuZWVkS25vd0lmSXNQdWJsaXNoZWQiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkTm90VG9vTG9uZ1RpdGxlIiwibmVlZE51bWJlckZvclJhbmsiLCJuZWVkVGl0bGUiLCJuZWVkVW5pcXVlVXJsIiwibmVlZFVybCIsIm5leHREYXRlV2l0aG91dFF1ZXN0aW9ubmFpcmUiLCJuZXh0UXVlc3Rpb25uYWlyZXNMaXN0IiwicXVlc3Rpb25uYWlyZXNOYW1lIiwicXVlc3Rpb25uYWlyZU5lZWRCZUNvbXBsZXRlZCIsInB1Ymxpc2hlZEF0IiwicHVibGlzaGVkQnkiLCJzZWFyY2hRdWVzdGlvbm5haXJlUmVzdWx0VGl0bGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlV2l0aE5vUmVzdWx0Iiwic2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhSZXN1bHQiLCJ3cm9uZ0Fuc3dlclR4dCIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJkaXZNYWluIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdkNyYXNoIiwiZGl2TWVzc2FnZSIsImRpdlF1ZXN0aW9ubmFpcmVzIiwiYnRuUmVnZW5lcmF0ZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImlzQ29ubmVjdGVkIiwiY2hlY2tTZXNzaW9uIiwibWVzc2FnZSIsImNvbG9yIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwiYWRkRWxlbWVudCIsInN0eWxlIiwiZGlzcGxheSIsInJlbW92ZUxvY2FseSIsInhoclN0YXRzIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIm1hcFRleHQiLCJOQl9VU0VSU18yNEgiLCJuYk5ld1VzZXJzMjRIIiwiTkJfU1VCU0NSSVBUSU9OU18yNEgiLCJTdWJzY3JpcHRpb25zIiwibmJTdWJzY3JpcHRpb25zMjRIIiwiTkJfVVNFUlNfREVMRVRFRF8yNEgiLCJuYkRlbGV0ZWRVc2VyczI0SCIsIk5CX0FOU1dFUlNfMjRIIiwiQW5zd2VycyIsIm5iQW5zd2VyczI0SCIsIk5CX1VTRVJTX1RPVCIsIm5iTmV3VXNlcnNUb3QiLCJOQl9TVUJTQ1JJUFRJT05TX1RPVCIsIm5iU3Vic2NyaXB0aW9uc1RvdCIsIk5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSIsIm5iU3Vic2NyaXB0aW9uc1ByZW1pdW0iLCJOQl9BTlNXRVJTX1RPVCIsIm5iQW5zd2Vyc1RvdCIsIk5CX1VTRVJTX0RFTEVURURfVE9UIiwibmJEZWxldGVkVXNlcnNUb3QiLCJOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQiLCJuYkRlbGV0ZWRVc2Vyc1dhc1ZhbGlkZWQiLCJOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0iLCJuYkRlbGV0ZWRVc2Vyc1RvdFdhc1ByZW1pdW0iLCJyZXBsYWNlQWxsIiwic2V0UmVxdWVzdEhlYWRlciIsInRva2VuIiwic2VuZCIsInhock5leHRRdWVzdGlvbm5haXJlcyIsIkFycmF5IiwiaXNBcnJheSIsImxpc3RIVE1MIiwiZGF5U3RyIiwib3B0aW9uc0RheVN0ciIsIndlZWtkYXkiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJmb3JtYXQiLCJkYXRlUHVibGlzaGluZyIsImRhdGVGb3JtYXQiLCJpc1B1Ymxpc2hhYmxlIiwiZGF0ZU5lZWRlZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJ4aHJSZWdlbmVyYXRlIiwiY29uc29sZSIsImVycm9yIiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJsaW5rIiwiaG9tZVBhZ2UiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJuYlF1ZXN0aW9ucyIsIlF1ZXN0aW9ubmFpcmVJZCIsIkdyb3VwSWQiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwibm93IiwieGhyIiwib25sb2FkIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImluZGV4T2YiLCJhc3NpZ24iLCJvbmVycm9yIiwic3RhdHVzVGV4dCJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FB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QU1vRSxZQUFZLEdBQUcsQ0FBQ04sY0FBRCxFQUFpQjlHLE9BQWpCLEVBQTBCK0csU0FBMUIsS0FDckI7QUFDSSxNQUFHLENBQUNqTiwyREFBTyxDQUFDa0csT0FBRCxDQUFYLEVBQ0lxRSxvRUFBVSxDQUFDLFNBQUQsRUFBWXJFLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ2xHLDJEQUFPLENBQUNpTixTQUFELENBQVgsRUFDSTFDLG9FQUFVLENBQUMsS0FBRCxFQUFRMEMsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDak4sMkRBQU8sQ0FBQ2dOLGNBQUQsQ0FBWCxFQUNJZSxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JFLE1BQWhCLENBQXVCbEIsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9ob21lTWFuYWdlci5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9ob21lTWFuYWdlci5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvcXVlc3Rpb25uYWlyZVwiOiBcIi4uL2xhbmcvZnIvcXVlc3Rpb25uYWlyZS5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3F1ZXN0aW9ubmFpcmUkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIiwvLyBkw6lwbGFjw6kgZGFucyBnZW5lcmFsLmpzXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLC8vaWRlbVxuICAgIGJ0blNlbmRSZXNwb25zZTogXCJUZXN0ZXogdm9zIHLDqXBvbnNlcy5cIixcbiAgICBidG5TaGFyZVF1aXpUeHQ6IFwiUGFydGFnZXIgdmlhIFwiLFxuICAgIGJ0blNoYXJlUXVpek1haWxCb2R5OiBcIkJvbmpvdXIsJTBBJTBBVm9pY2klMjB1biUyMGxpZW4lMjBpbnRlcm5ldCUyMHF1aSUyMGRldnJhaXQlMjB0J2ludMOpcmVzc2VyIDolMEFcIiwgICAgXG4gICAgYnRuU2hvd1F1ZXN0aW9ubmFpcmU6IFwiUsOpcG9uZHJlIGF1IHF1aXogIVwiLFxuICAgIGNvcnJlY3RBbnN3ZXJUeHQ6IFwiQm9ubmUgcsOpcG9uc2VcIixcbiAgICBlc3RpbWF0ZWRUaW1lOiBcIkR1csOpZSBkZSBsZWN0dXJlIGVzdGltw6llIDogXCIsXG4gICAgZXN0aW1hdGVkVGltZU9wdGlvbiA6XG4gICAge1xuICAgICAgICBzaG9ydDogXCJjb3VydGVcIixcbiAgICAgICAgbWVkaXVtOiBcIm1veWVubmVcIixcbiAgICAgICAgbG9uZzogXCJsb25ndWVcIlxuICAgIH0sXG4gICAgZXhwbGFuYXRpb25CZWZvcmVUeHQ6IFwiRXh0cmFpdCA6XCIsXG4gICAgaGF2ZUJlZW5QdWJsaXNoZWQgOiBcIjpOQiBub3V2ZWF1eCBxdWVzdGlvbm5haXJlcyBvbnQgw6l0w6kgcHVibGnDqXMuXCIsXG4gICAgaGF2ZUJlZW5SZWdlbmVyYXRlZCA6IFwiTGVzIHBhZ2VzIEhUTUwgZGUgI05CMSBxdWVzdGlvbm5haXJlcyBvdSDDqWzDqW1lbnRzIGRlIGdyb3VwZXMsICNOQjIgcXVpenMgZ3JvdXDDqXMgZXQgI05CMyB0aMOobWVzIG9udCDDqXTDqSByZWfDqW7DqXLDqXMuXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciwgbGUgXCIsXG4gICAgbGlua0dvVG9OZXh0RWxlbWVudDogXCJBcnRpY2xlIHN1aXZhbnRcIixcbiAgICBsaW5rR29Ub1F1aXo6IFwiQWNjw6lkZXIgYXUgcXVpelwiLCAgICBcbiAgICBuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlOiBcIkxhIGRhdGUgZGUgcHVibGljYXRpb24gZm91cm5pZSBuJ2EgcGFzIHVuIGZvcm1hdCB2YWxpZGUuXCIsXG4gICAgbmVlZEVzdGltYXRlZFRpbWU6IFwiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciB1bmUgZXN0aW1hdGlvbiBkZSBsYSBkdXLDqWUgZGUgY2UgcXVpei5cIixcbiAgICBuZWVkR3JvdXBJZlJhbms6IFwiVm91cyBhdmV6IHNhaXNpIHVuIHJhbmcgZGUgY2xhc3NlbWVudCwgc2FucyBzw6lsZWN0aW9ubmVyIGxlIGdyb3VwZSBkdSBxdWl6LlwiLFxuICAgIG5lZWRJbnRyb2R1Y3Rpb246IFwiTWVyY2kgZGUgZm91cm5pciB1biB0ZXh0ZSBkJ2ludHJvZHVjdGlvbiDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRLbm93SWZJc1B1Ymxpc2hlZDogXCJJbCBmYXV0IHNhdm9pciBzaSBjZSBxdWl6IGVzdCBwdWJsacOpLlwiLFxuICAgIG5lZWRMYW5ndWFnZTogXCJWb3VzIGRldmV6IHPDqWxlY3Rpb25uZXIgbGEgbGFuZ3VlIGRlIGNlIHF1aXouXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdUaXRsZTogXCJMZSB0aXRyZSBkdSBxdWl6IG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE51bWJlckZvclJhbms6IFwiVm91cyBkZXZleiBzYWlzaXIgdW4gbm9tYnJlIGVudGllciBwb3VyIGxlIHJhbmcgZGUgY2UgcXVlc3Rpb25uYWlyZSBkYW5zIHNvbiBncm91cGUuXCIsICAgICAgICAgICAgICBcbiAgICBuZWVkVGl0bGU6IFwiTWVyY2kgZGUgZm91cm5pciB1biB0aXRyZSDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRVbmlxdWVVcmw6IFwiTCd1cmwgZHUgcXVpeiBkb2l0IMOqdHJlIHVuaXF1ZS5cIixcbiAgICBuZWVkVXJsOiBcIk1lcmNpIGRlIGZvdXJuaXIgbCd1cmwgw6Agdm90cmUgcXVpei5cIixcbiAgICBuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlOiBcIlByb2NoYWluZSBkYXRlIHNhbnMgcXVpeiBwcm9ncmFtbcOpIDogXCIsXG4gICAgbmV4dFF1ZXN0aW9ubmFpcmVzTGlzdDogXCJMZXMgI05CIHByb2NoYWlucyBxdWl6cyBkZXZhbnQgw6p0cmUgcHVibGnDqXNcIixcbiAgICBxdWVzdGlvbm5haXJlc05hbWU6IFwicXVpelwiLFxuICAgIHF1ZXN0aW9ubmFpcmVOZWVkQmVDb21wbGV0ZWQ6IFwiUXVpeiBpbmNvbXBsZXRcIixcbiAgICBwdWJsaXNoZWRBdDogXCIsIGxlXCIsXG4gICAgcHVibGlzaGVkQnk6IFwiUXVpeiBwdWJsacOpIHBhclwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVSZXN1bHRUaXRsZSA6IFwiUsOpc3VsdGF0IHBvdXIgdm90cmUgcmVjaGVyY2hlXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhOb1Jlc3VsdCA6IFwiQXVjdW4gcXVpeiBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIHZvdHJlIHJlY2hlcmNoZS5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlV2l0aFJlc3VsdCA6IFwiSWwgeSBhICNOQiBhcnRpY2xlI1MgY29ycmVzcG9uZGFudCDDoCB2b3RyZSByZWNoZXJjaGUgOlwiLFxuICAgIHdyb25nQW5zd2VyVHh0OiBcIk1hdXZhaXNlIHLDqXBvbnNlXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gUEFHRSBEJ0FDQ1VFSUwgUE9VUiBMRVMgR0VTVElPTk5BSVJFU1xuXG4vLy8gVsOpcmlmaWUgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2UgdmVycyBsZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24gc2kgY2Ugbidlc3QgcGFzIGxlIGNhcy5cbi8vLyBTaSBjJ2VzdCBvaywgb24gcsOpY3Vww6hyZSBsZXMgc3RhdHMgZ8OpbsOpcmFsZXMgZXQgZGVzIGRlcm5pw6hyZXMgMjRIIGV0IGxlcyBhZmZpY2hlXG4vLy8gT24gbGlzdGUgZW5zdWl0ZSBsZXMgcHJvY2hhaW5zIHF1aXpzIGRldmFudCDDqnRyZSBwdWJsacOpcyBlbiBmYWlzYW50IHJlc3NvcnRpciBjZXV4IGRldmFudCDDqnRyZSBjb21wbMOpdMOpcyArIGxhIHByb2NoYWluZSBkYXRlIHNhbnMgcXVpelxuLy8vIFVuIG1lbnUgcGVybWV0IMOgIGwndXRpbGlzYXRldXIgZCdhY2PDqWRlciBhdXggZm9ybXVsYWlyZXMgcGVybWV0dGFudCBkZSBnw6lyZXIgbGVzIHF1aXpzIGV0IGxlcyBjb21wdGVzIHV0aWxpc2F0ZXVycyBldCBhYm9ubmVtZW50c1xuLy8vIFVuIG1lc3NhZ2UgdmVuYW50IGQndW5lIGF1dHJlIHBhZ2UgcGV1dCBhdXNzaSDDqnRyZSDDoCBhZmZpY2hlciBsb3JzIGR1IHByZW1pZXIgY2hhcmdlbWVudC5cblxuLy8vIFRlbXBvcmFpcmVtZW50LCBjJ2VzdCBpY2kgYXVzc2kgcXVlIGwnb24gcGV1dCByw6lnw6luw6lyZXIgdG91dCBsZSBIVE1MIC0+IMOgIHRlcm1lIGRhbnMgaG9tZUFkbWluICFcblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5pbXBvcnQgeyBnZXRBZG1pblN0YXRzLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuaW1wb3J0IHsgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcywgcXVlc3Rpb25uYWlyZVJvdXRlcywgcmVnZW5lcmF0ZUhUTUwgfSBmcm9tIFwiLi4vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzXCI7XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gRm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBkYXRlRm9ybWF0LCBpc0VtcHR5LCByZXBsYWNlQWxsIH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBub3RBbGxvd2VkLCBzZXJ2ZXJFcnJvciwgc3RhdHNBZG1pbiB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlLCBuZXh0UXVlc3Rpb25uYWlyZXNMaXN0LCBxdWVzdGlvbm5haXJlTmVlZEJlQ29tcGxldGVkIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3F1ZXN0aW9ubmFpcmVcIik7XG5jb25zdCB7IHdlbGNvbWVNZXNzYWdlIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBkaXZNYWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZDcmFzaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3Jhc2hcIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UXVlc3Rpb25uYWlyZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVzXCIpO1xuY29uc3QgYnRuUmVnZW5lcmF0ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid2FudFJlZ2VuZXJhdGVcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHsgICAgICAgIFxuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1wibWFuYWdlclwiLCBcImFkbWluXCJdLCBcIi9cIitjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSwgeyBtZXNzYWdlOiBub3RBbGxvd2VkLCBjb2xvcjpcImVycm9yXCIgfSk7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcImgyXCIsIHdlbGNvbWVNZXNzYWdlLnJlcGxhY2UoXCIjTkFNRVwiLCB1c2VyLm5hbWUpKTtcbiAgICAgICAgICAgIGRpdk1haW4uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBMZXMgc3RhdHMgc3VyIGxlcyBjb21wdGVzIHV0aWxpc2F0ZXVycyA6XG4gICAgICAgICAgICBjb25zdCB4aHJTdGF0cyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgeGhyU3RhdHMub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytnZXRBZG1pblN0YXRzKTtcbiAgICAgICAgICAgIHhoclN0YXRzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9VU0VSU18yNEggOiByZXNwb25zZS5uYk5ld1VzZXJzMjRILFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1NVQlNDUklQVElPTlNfMjRIIDogcmVzcG9uc2UuU3Vic2NyaXB0aW9ucy5uYlN1YnNjcmlwdGlvbnMyNEgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfVVNFUlNfREVMRVRFRF8yNEggOiByZXNwb25zZS5uYkRlbGV0ZWRVc2VyczI0SCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9BTlNXRVJTXzI0SCA6IHJlc3BvbnNlLkFuc3dlcnMubmJBbnN3ZXJzMjRILFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTX1RPVCA6IHJlc3BvbnNlLm5iTmV3VXNlcnNUb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfU1VCU0NSSVBUSU9OU19UT1QgOiByZXNwb25zZS5TdWJzY3JpcHRpb25zLm5iU3Vic2NyaXB0aW9uc1RvdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gOiByZXNwb25zZS5TdWJzY3JpcHRpb25zLm5iU3Vic2NyaXB0aW9uc1ByZW1pdW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfQU5TV0VSU19UT1QgOiByZXNwb25zZS5BbnN3ZXJzLm5iQW5zd2Vyc1RvdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9VU0VSU19ERUxFVEVEX1RPVCA6IHJlc3BvbnNlLm5iRGVsZXRlZFVzZXJzVG90LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCA6IHJlc3BvbnNlLm5iRGVsZXRlZFVzZXJzV2FzVmFsaWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gOiByZXNwb25zZS5uYkRlbGV0ZWRVc2Vyc1RvdFdhc1ByZW1pdW1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCByZXBsYWNlQWxsKHN0YXRzQWRtaW4sIG1hcFRleHQpLCBcIlwiLCBcIlwiLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHJTdGF0cy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTsgXG4gICAgICAgICAgICB4aHJTdGF0cy5zZW5kKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIExlcyBxdWVzdGlvbm5haXJlcyBiaWVudMO0dCBwdWJsacOpcyA6ICAgICAgXG4gICAgICAgICAgICBjb25zdCB4aHJOZXh0UXVlc3Rpb25uYWlyZXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhock5leHRRdWVzdGlvbm5haXJlcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtxdWVzdGlvbm5haXJlUm91dGVzK2dldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMpO1xuICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzcG9uc2UucXVlc3Rpb25uYWlyZXMpKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdEhUTUw9XCJcIiwgZGF5U3RyLCBvcHRpb25zRGF5U3RyID0geyB3ZWVrZGF5OiAnbG9uZyd9O1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheVN0cj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChsYW5nLCBvcHRpb25zRGF5U3RyKS5mb3JtYXQobmV3IERhdGUocmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0uZGF0ZVB1Ymxpc2hpbmcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SFRNTCs9XCI8bGk+XCIrZGF5U3RyK1wiIFwiK2RhdGVGb3JtYXQocmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0uZGF0ZVB1Ymxpc2hpbmcsIGF2YWlsYWJsZUxhbmdzWzBdKStcIjogPGEgaHJlZj0nXCIrY29uZmlnVGVtcGxhdGUucXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZStcIj9pZD1cIityZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pZCtcIic+XCIrcmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0udGl0bGUrXCI8L2E+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0uaXNQdWJsaXNoYWJsZT09PWZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SFRNTCs9XCIgPHNwYW4gY2xhc3M9J2Vycm9yJz4oXCIrcXVlc3Rpb25uYWlyZU5lZWRCZUNvbXBsZXRlZCtcIik8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5xdWVzdGlvbm5haXJlcy5sZW5ndGghPT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25uYWlyZXMsIFwiaDJcIiwgbmV4dFF1ZXN0aW9ubmFpcmVzTGlzdC5yZXBsYWNlKFwiI05CXCIsIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbm5haXJlcywgXCJoNFwiLCBuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlK2RhdGVGb3JtYXQocmVzcG9uc2UuZGF0ZU5lZWRlZCwgYXZhaWxhYmxlTGFuZ3NbMF0pLCBcIlwiLCBbXCJpbmZvXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcInVsXCIsIGxpc3RIVE1MLCBcIlwiLCBcIlwiLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7IFxuICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLnNlbmQoKTtcblxuICAgICAgICAgICAgLy8gVHJhaXRlbWVudCBkZW1hbmRlIHLDqWfDqW7DqXJlciBIVE1MXG4gICAgICAgICAgICBidG5SZWdlbmVyYXRlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHJSZWdlbmVyYXRlID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyUmVnZW5lcmF0ZS5vcGVuKFwiR0VUXCIsIGFwaVVybCtxdWVzdGlvbm5haXJlUm91dGVzK3JlZ2VuZXJhdGVIVE1MKTtcbiAgICAgICAgICAgICAgICB4aHJSZWdlbmVyYXRlLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJSZWdlbmVyYXRlLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgIHhoclJlZ2VuZXJhdGUuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyUmVnZW5lcmF0ZS5zZW5kKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2Q3Jhc2gsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXogb3UgZCd1biBncm91cGUgZGUgcXVpenNcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICAgICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkYXRhcy5Hcm91cElkPWFuc3dlci5Hcm91cElkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/front/public/JS/homeUser.app.js b/front/public/JS/homeUser.app.js index b7ba71f..7b50902 100644 --- a/front/public/JS/homeUser.app.js +++ b/front/public/JS/homeUser.app.js @@ -626,9 +626,9 @@ module.exports = { correctAnswerTxt: "Bonne réponse", estimatedTime: "Durée de lecture estimée : ", estimatedTimeOption: { - short: "courte", + "short": "courte", medium: "moyenne", - long: "longue" + "long": "longue" }, explanationBeforeTxt: "Extrait :", haveBeenPublished: ":NB nouveaux questionnaires ont été publiés.", @@ -1160,10 +1160,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- PAGE D'ACCUEIL DE L'UTILISATEUR /// Vérifier que l'utilisateur est bien connecté, a le bon statut et le rediriger vers le formulaire d'inscription si ce n'est pas le cas. /// Si c'est ok, on récupère ses infos et stats + les derniers quizs auxquels il a accès, mais n'a pas répondu. @@ -1173,20 +1169,22 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Un message venant d'une autre page peut aussi être à afficher lors du premier chargement. // Fichier de configuration côté client : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var _require = __webpack_require__(/*! ../../config/questionnaires */ "../config/questionnaires.js"), - getRandomQuestionnairesRoute = _require.getRandomQuestionnairesRoute, - getStatsAnswers = _require.getStatsAnswers, - questionnaireRoutes = _require.questionnaireRoutes, - searchQuestionnaires = _require.searchQuestionnaires, - searchQuestionnairesRoute = _require.searchQuestionnairesRoute; +const { + getRandomQuestionnairesRoute, + getStatsAnswers, + questionnaireRoutes, + searchQuestionnaires, + searchQuestionnairesRoute +} = __webpack_require__(/*! ../../config/questionnaires */ "../config/questionnaires.js"); -var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.js"), - getUsersQuestionnairesRoute = _require2.getUsersQuestionnairesRoute, - userRoutes = _require2.userRoutes; // Fonctions utiles au script : +const { + getUsersQuestionnairesRoute, + userRoutes +} = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // Fonctions utiles au script : @@ -1196,244 +1194,222 @@ var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.j // Dictionnaires : -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + lang + "/answer"), - statsUser = _require3.statsUser; +const { + statsUser +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + lang + "/answer"); -var _require4 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - nextPage = _require4.nextPage, - previousPage = _require4.previousPage, - serverError = _require4.serverError; +const { + nextPage, + previousPage, + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require5 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/questionnaire$")("./" + lang + "/questionnaire"), - searchQuestionnaireWithResult = _require5.searchQuestionnaireWithResult, - searchQuestionnaireWithNoResult = _require5.searchQuestionnaireWithNoResult; +const { + searchQuestionnaireWithResult, + searchQuestionnaireWithNoResult +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/questionnaire$")("./" + lang + "/questionnaire"); -var _require6 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/questionnaireaccess$")("./" + lang + "/questionnaireaccess"), - lastQuestionnairesForUser = _require6.lastQuestionnairesForUser, - noQuestionnaireAccess = _require6.noQuestionnaireAccess; +const { + lastQuestionnairesForUser, + noQuestionnaireAccess +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/questionnaireaccess$")("./" + lang + "/questionnaireaccess"); -var _require7 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - needBeConnected = _require7.needBeConnected, - welcomeMessage = _require7.welcomeMessage; // Principaux éléments du DOM manipulés : +const { + needBeConnected, + welcomeMessage +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); // Principaux éléments du DOM manipulés : -var divMain = document.getElementById("main-content"); -var divCrash = document.getElementById("crash"); -var divMessage = document.getElementById("message"); -var quizIntro = document.getElementById("quizsIntro"); -var quizListing = document.getElementById("quizsList"); -var quizPaginationPrevious = document.getElementById("previous"); -var quizPaginationNext = document.getElementById("next"); -var formSearch = document.getElementById("search"); -var inputBegin = document.getElementById("begin"); -var btnRandom = document.getElementById("random"); +const divMain = document.getElementById("main-content"); +const divCrash = document.getElementById("crash"); +const divMessage = document.getElementById("message"); +const quizIntro = document.getElementById("quizsIntro"); +const quizListing = document.getElementById("quizsList"); +const quizPaginationPrevious = document.getElementById("previous"); +const quizPaginationNext = document.getElementById("next"); +const formSearch = document.getElementById("search"); +const inputBegin = document.getElementById("begin"); +const btnRandom = document.getElementById("random"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, xhrStats, xhrLastQuizs, sendSearch; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(["user"], "/" + configTemplate.connectionPage, { - message: needBeConnected, - color: "error" - }, window.location); +const initialise = async () => { + try { + // Si l'utilisateur n'est pas connecté, pas la peine d'aller + loin : + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(["user"], "/" + configTemplate.connectionPage, { + message: needBeConnected, + color: "error" + }, window.location); - case 3: - isConnected = _context.sent; + if (isConnected) { + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "h1", welcomeMessage.replace("#NAME", user.name)); + divMain.style.display = "block"; - if (isConnected) { - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "h1", welcomeMessage.replace("#NAME", user.name)); - divMain.style.display = "block"; - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); - } // Initialisation du formulaire de recherche : + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); + } // Initialisation du formulaire de recherche : - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])({ - "searchQuestionnaires": searchQuestionnaires - }, formSearch); // Les stats : + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])({ + "searchQuestionnaires": searchQuestionnaires + }, formSearch); // Les stats : - xhrStats = new XMLHttpRequest(); - xhrStats.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + questionnaireRoutes + getStatsAnswers + user.id); + const xhrStats = new XMLHttpRequest(); + xhrStats.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + questionnaireRoutes + getStatsAnswers + user.id); - xhrStats.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + xhrStats.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - if (this.status === 200 && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.nbAnswers) && response.nbAnswers !== 0) // pas de stats si aucune réponse ! - { - var txtIntro = ""; - var mapText = { - NBANSWERS: response.nbAnswers, - NBQUESTIONNAIRES: response.nbQuestionnaires, - NBTOTQUESTIONNAIRES: response.groups.nbPublished + response.questionnaires.nbWithoutGroupPublished, - AVGDURATION: response.avgDuration, - AVGCORRECTANSWERS: response.avgCorrectAnswers - }; // La situation est plurielle... + if (this.status === 200 && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.nbAnswers) && response.nbAnswers !== 0) // pas de stats si aucune réponse ! + { + let txtIntro = ""; + const mapText = { + NBANSWERS: response.nbAnswers, + NBQUESTIONNAIRES: response.nbQuestionnaires, + NBTOTQUESTIONNAIRES: response.groups.nbPublished + response.questionnaires.nbWithoutGroupPublished, + AVGDURATION: response.avgDuration, + AVGCORRECTANSWERS: response.avgCorrectAnswers + }; // La situation est plurielle... - txtIntro = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(statsUser, mapText); - txtIntro = response.nbAnswers > 1 ? txtIntro.replace("S1", "s") : txtIntro.replace("S1", ""); - txtIntro = response.nbQuestionnaires > 1 ? txtIntro.replace("S2", "s").replace("S3", "s") : txtIntro.replace("S2", "").replace("S3", "s"); - txtIntro = mapText.NBTOTQUESTIONNAIRES > 1 ? txtIntro.replace("S4", "s") : txtIntro.replace("S4", ""); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", txtIntro, "", "", "", false); - } - } - }; - - xhrStats.setRequestHeader("Authorization", "Bearer " + user.token); - xhrStats.send(); // Par défaut, on affiche des derniers éléments supposés lus par l'utilisateur : - - xhrLastQuizs = new XMLHttpRequest(); - xhrLastQuizs.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + getUsersQuestionnairesRoute + "" + user.id + "/" + 0 + "/" + configTemplate.nbQuestionnairesUserHomePage + "/html"); - - xhrLastQuizs.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200) { - if (response.nbTot === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", noQuestionnaireAccess, "", ["info"]);else if (response.html) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", lastQuestionnairesForUser, "", ["info"]); - quizListing.innerHTML = response.html; - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", serverError, "", ["error"]); // revoir si intérêt d'afficher quelque chose - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", serverError, "", ["error"]); // idem - - } - }; - - xhrLastQuizs.setRequestHeader("Authorization", "Bearer " + user.token); - xhrLastQuizs.send(); // Traitement du lancement d'une recherche - // La recherche peut être lancée via la bouton submit ou un lien de pagination - - sendSearch = function sendSearch() { - var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "search"; - quizListing.innerHTML = "" + ""; - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch); - var xhrSearch = new XMLHttpRequest(); - if (type == "search") xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + questionnaireRoutes + searchQuestionnairesRoute);else if (type == "random") xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + questionnaireRoutes + getRandomQuestionnairesRoute); - - xhrSearch.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.nbTot)) { - if (response.nbTot === 0) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", searchQuestionnaireWithNoResult, "", ["info"]); - window.location.hash = ""; // sinon les hash s'enchaînent... - - window.location.assign("#quizsIntro"); - } else if (response.html) { - var txtIntro = searchQuestionnaireWithResult.replace("#NB", response.nbTot); - txtIntro = response.nbTot > 1 ? txtIntro.replace("#S", "s") : txtIntro.replace("#S", ""); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", txtIntro, "", ["success"]); - quizListing.innerHTML = response.html; - window.location.hash = ""; - window.location.assign("#quizsIntro"); // Pagination nécessaire ? - // on commence par vider... - - quizPaginationPrevious.innerHTML = ""; - quizPaginationNext.innerHTML = ""; - - if (response.begin != 0) // peut retourner "0" et non 0 ! - { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizPaginationPrevious, "a", "<< " + previousPage, "previousRes", ["button"], { - href: "#search" - }); // revoir, les "<<" pourraient être gérées par le CSS - - var previousPageElt = document.getElementById("previousRes"); // le retour à la page précédente peut se faire en cliquant sur le bouton ou via l'historique du navigateur - - var goBackRes = function goBackRes() { - var newBegin = response.begin - configTemplate.nbQuestionnairesUserHomePage; - if (newBegin < 0) // ne devrait pas être possible.. - newBegin = 0; - document.getElementById("begin").value = newBegin; - sendSearch(); - window.location.hash = ""; - window.location.assign("#quizsIntro"); // pour remonter - }; - - previousPageElt.addEventListener("click", function (e) { - e.preventDefault(); - goBackRes(); - }); - /* semble provoqué bug ??? - window.onpopstate = function(e) - { - e.preventDefault(); - goBackRes(); - };*/ - } - - if (response.end < response.nbTot - 1) // -1, car tableau commence à 0 ! - { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizPaginationNext, "a", nextPage + " >>", "nextRes", ["button"], { - href: "#search" - }, false); - var nextPageElt = document.getElementById("nextRes"); - nextPageElt.addEventListener("click", function (e) { - e.preventDefault(); - document.getElementById("begin").value = response.end + 1; - sendSearch(); - window.location.hash = ""; // sinon les hash s'enchaînent... - - window.location.assign("#quizsIntro"); // pour remonter - }); - } - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", serverError, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", serverError, "", ["error"]); - } - }; - - xhrSearch.setRequestHeader("Content-Type", "application/json"); - xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token); - - if (datas) { - datas.output = "html"; - xhrSearch.send(JSON.stringify(datas)); - } - }; - - btnRandom.addEventListener("click", function (e) { - e.preventDefault(); - document.getElementById("begin").value = 0; - sendSearch("random"); - }); - formSearch.addEventListener("submit", function (e) { - e.preventDefault(); - document.getElementById("begin").value = 0; - sendSearch(); - }); + txtIntro = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(statsUser, mapText); + txtIntro = response.nbAnswers > 1 ? txtIntro.replace("S1", "s") : txtIntro.replace("S1", ""); + txtIntro = response.nbQuestionnaires > 1 ? txtIntro.replace("S2", "s").replace("S3", "s") : txtIntro.replace("S2", "").replace("S3", "s"); + txtIntro = mapText.NBTOTQUESTIONNAIRES > 1 ? txtIntro.replace("S4", "s") : txtIntro.replace("S4", ""); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", txtIntro, "", "", "", false); } - - _context.next = 11; - break; - - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - console.error(_context.t0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); - - case 11: - case "end": - return _context.stop(); } - } - }, _callee, null, [[0, 7]]); - })); + }; - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + xhrStats.setRequestHeader("Authorization", "Bearer " + user.token); + xhrStats.send(); // Par défaut, on affiche des derniers éléments supposés lus par l'utilisateur : + + const xhrLastQuizs = new XMLHttpRequest(); + xhrLastQuizs.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + getUsersQuestionnairesRoute + "" + user.id + "/" + 0 + "/" + configTemplate.nbQuestionnairesUserHomePage + "/html"); + + xhrLastQuizs.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 200) { + if (response.nbTot === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", noQuestionnaireAccess, "", ["info"]);else if (response.html) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", lastQuestionnairesForUser, "", ["info"]); + quizListing.innerHTML = response.html; + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", serverError, "", ["error"]); // revoir si intérêt d'afficher quelque chose + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", serverError, "", ["error"]); // idem + + } + }; + + xhrLastQuizs.setRequestHeader("Authorization", "Bearer " + user.token); + xhrLastQuizs.send(); // Traitement du lancement d'une recherche + // La recherche peut être lancée via la bouton submit ou un lien de pagination + + const sendSearch = (type = "search") => { + quizListing.innerHTML = "" + ""; + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch); + const xhrSearch = new XMLHttpRequest(); + if (type == "search") xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + questionnaireRoutes + searchQuestionnairesRoute);else if (type == "random") xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + questionnaireRoutes + getRandomQuestionnairesRoute); + + xhrSearch.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 200 && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.nbTot)) { + if (response.nbTot === 0) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", searchQuestionnaireWithNoResult, "", ["info"]); + window.location.hash = ""; // sinon les hash s'enchaînent... + + window.location.assign("#quizsIntro"); + } else if (response.html) { + let txtIntro = searchQuestionnaireWithResult.replace("#NB", response.nbTot); + txtIntro = response.nbTot > 1 ? txtIntro.replace("#S", "s") : txtIntro.replace("#S", ""); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", txtIntro, "", ["success"]); + quizListing.innerHTML = response.html; + window.location.hash = ""; + window.location.assign("#quizsIntro"); // Pagination nécessaire ? + // on commence par vider... + + quizPaginationPrevious.innerHTML = ""; + quizPaginationNext.innerHTML = ""; + + if (response.begin != 0) // peut retourner "0" et non 0 ! + { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizPaginationPrevious, "a", "<< " + previousPage, "previousRes", ["button"], { + href: "#search" + }); // revoir, les "<<" pourraient être gérées par le CSS + + const previousPageElt = document.getElementById("previousRes"); // le retour à la page précédente peut se faire en cliquant sur le bouton ou via l'historique du navigateur + + const goBackRes = () => { + let newBegin = response.begin - configTemplate.nbQuestionnairesUserHomePage; + if (newBegin < 0) // ne devrait pas être possible.. + newBegin = 0; + document.getElementById("begin").value = newBegin; + sendSearch(); + window.location.hash = ""; + window.location.assign("#quizsIntro"); // pour remonter + }; + + previousPageElt.addEventListener("click", function (e) { + e.preventDefault(); + goBackRes(); + }); + /* semble provoqué bug ??? + window.onpopstate = function(e) + { + e.preventDefault(); + goBackRes(); + };*/ + } + + if (response.end < response.nbTot - 1) // -1, car tableau commence à 0 ! + { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizPaginationNext, "a", nextPage + " >>", "nextRes", ["button"], { + href: "#search" + }, false); + const nextPageElt = document.getElementById("nextRes"); + nextPageElt.addEventListener("click", function (e) { + e.preventDefault(); + document.getElementById("begin").value = response.end + 1; + sendSearch(); + window.location.hash = ""; // sinon les hash s'enchaînent... + + window.location.assign("#quizsIntro"); // pour remonter + }); + } + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", serverError, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", serverError, "", ["error"]); + } + }; + + xhrSearch.setRequestHeader("Content-Type", "application/json"); + xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token); + + if (datas) { + datas.output = "html"; + xhrSearch.send(JSON.stringify(datas)); + } + }; + + btnRandom.addEventListener("click", function (e) { + e.preventDefault(); + document.getElementById("begin").value = 0; + sendSearch("random"); + }); + formSearch.addEventListener("submit", function (e) { + e.preventDefault(); + document.getElementById("begin").value = 0; + sendSearch(); + }); + } + } catch (e) { + console.error(e); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); + } +}; initialise(); @@ -1453,14 +1429,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1478,32 +1453,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1527,13 +1491,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1554,25 +1518,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1580,49 +1536,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1649,27 +1583,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1678,11 +1608,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1696,96 +1626,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1794,4 +1696,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9xdWVzdGlvbm5haXJlJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmVhY2Nlc3MkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvYW5zd2VyLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvcXVlc3Rpb25uYWlyZS5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlYWNjZXNzLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9tZVVzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiZGVmYXVsdFJlY2VpcHREYXlzIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsImZpZWxkTmV3UXVlc3Rpb25uYWlyZXMiLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbiIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4IiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmVzIiwiZGlyV2ViUXVlc3Rpb25uYWlyZXMiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInJlZ2VuZXJhdGVIVE1MIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdyb3VwUm91dGVzIiwiZ2V0R3JvdXBSb3V0ZSIsInByZXZpZXdHcm91cFJvdXRlcyIsInNlYXJjaEdyb3Vwc1JvdXRlIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRBZG1pblN0YXRzIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwiLCJjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIiwiY2hlY2tSZXNwb25zZXNPdXB1dFN1Y2Nlc3MiLCJuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UiLCJuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNaW5OdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZE1pbk51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyU2Vjb25kZXNSZXNwb25zZSIsIm5vUHJldmlvdXNBbnN3ZXIiLCJwcmV2aW91c0Fuc3dlcnNMaW5lIiwicHJldmlvdXNBbnN3ZXJzU3RhdHMiLCJwcmV2aW91c0Fuc3dlcnNUaXRsZSIsInJlc3BvbnNlU2F2ZWRFcnJvciIsInJlc3BvbnNlU2F2ZWRNZXNzYWdlIiwic3RhdHNVc2VyIiwid2FudFRvU2F2ZVJlc3BvbnNlcyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYnRuU2VuZFJlc3BvbnNlIiwiYnRuU2hhcmVRdWl6VHh0IiwiYnRuU2hhcmVRdWl6TWFpbEJvZHkiLCJidG5TaG93UXVlc3Rpb25uYWlyZSIsImNvcnJlY3RBbnN3ZXJUeHQiLCJlc3RpbWF0ZWRUaW1lIiwiZXN0aW1hdGVkVGltZU9wdGlvbiIsInNob3J0IiwibWVkaXVtIiwibG9uZyIsImV4cGxhbmF0aW9uQmVmb3JlVHh0IiwiaGF2ZUJlZW5QdWJsaXNoZWQiLCJoYXZlQmVlblJlZ2VuZXJhdGVkIiwibGFzdFVwZGF0ZWQiLCJsaW5rR29Ub05leHRFbGVtZW50IiwibGlua0dvVG9RdWl6IiwibmVlZENvcnJlY3RQdWJsaXNoaW5nRGF0ZSIsIm5lZWRFc3RpbWF0ZWRUaW1lIiwibmVlZEdyb3VwSWZSYW5rIiwibmVlZEludHJvZHVjdGlvbiIsIm5lZWRLbm93SWZJc1B1Ymxpc2hlZCIsIm5lZWRMYW5ndWFnZSIsIm5lZWROb3RUb29Mb25nVGl0bGUiLCJuZWVkTnVtYmVyRm9yUmFuayIsIm5lZWRUaXRsZSIsIm5lZWRVbmlxdWVVcmwiLCJuZWVkVXJsIiwibmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZSIsIm5leHRRdWVzdGlvbm5haXJlc0xpc3QiLCJxdWVzdGlvbm5haXJlc05hbWUiLCJxdWVzdGlvbm5haXJlTmVlZEJlQ29tcGxldGVkIiwicHVibGlzaGVkQXQiLCJwdWJsaXNoZWRCeSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVSZXN1bHRUaXRsZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoTm9SZXN1bHQiLCJzZWFyY2hRdWVzdGlvbm5haXJlV2l0aFJlc3VsdCIsIndyb25nQW5zd2VyVHh0IiwibGFzdFF1ZXN0aW9ubmFpcmVzRm9yVXNlciIsIm5vdEZvdW5kIiwibm9RdWVzdGlvbm5haXJlQWNjZXNzIiwicXVlc3Rpb25uYWlyZVJldHJ5SW5mbyIsInF1ZXN0aW9ubmFpcmVSZXRyeUluZm9UeHQiLCJzZWFyY2hJc05vdExvbmdFbm91Z2giLCJhbHJlYWR5Q29ubmVjdGVkIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiYmFkUGFzc3dvcmQiLCJieWVieWVNZXNzYWdlIiwiY29ubmVjdGlvbk9rIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiZmFpbEJvdFRlc3QiLCJmYWlsQm90VGVzdExvZyIsImZvcm1zRW1haWxMYWJlbCIsImZvcm1zRW1haWxQbGFjZWhvbGRlciIsImZvcm1zRW1haWwyUGxhY2Vob2xkZXIiLCJmb3Jtc0NHVU9rTGFiZWwiLCJmb3Jtc1N1Ym1pdFR4dCIsImdvZGZhdGhlckZvdW5kIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc1VzZXJOYkdvZENoaWxkcyIsImluZm9zVXNlck5vR29kY2hpbGRzIiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luTGlua1R4dCIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtUeHQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVMaW5rVHh0IiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibmVlZEJlQ29ubmVjdGVkIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZEVtYWlsIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkTG9uZ1Bhc3NXb3JkIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZFN0YXR1cyIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsInBhc3N3b3JkQ29waWVkIiwic2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0IiwidG9vTWFueUxvZ2luRmFpbHMiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ3ZWxjb21lTWVzc2FnZSIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsImkiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJ0YWdzTGlzdFR4dCIsImFib3V0UGFnZSIsImNndVBhZ2UiLCJkZWxldGVMaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJ1c2VySG9tZVBhZ2VUeHQiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJtYWlsUmVjaXBpZW50VHh0IiwibGljZW5jZVR4dCIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsImhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZSIsIm5ld3NMaXN0VGl0bGUiLCJ0YWdMaXN0VGl0bGUiLCJ0YWdMaXN0TWV0YURlc2MiLCJ0YWdMaXN0SW50cm8iLCJhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQiLCJxdWl6RWxlbWVudExpbmtzSW50cm8iLCJxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlIiwiZXhwbGFuYXRpb25FbGVtZW50VHh0IiwidHdpdHRlckFjY291bnQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsImNvbmZpZ1RlbXBsYXRlIiwiZGl2TWFpbiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZDcmFzaCIsImRpdk1lc3NhZ2UiLCJxdWl6SW50cm8iLCJxdWl6TGlzdGluZyIsInF1aXpQYWdpbmF0aW9uUHJldmlvdXMiLCJxdWl6UGFnaW5hdGlvbk5leHQiLCJmb3JtU2VhcmNoIiwiaW5wdXRCZWdpbiIsImJ0blJhbmRvbSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImNoZWNrU2Vzc2lvbiIsIm1lc3NhZ2UiLCJjb2xvciIsIndpbmRvdyIsImxvY2F0aW9uIiwiaXNDb25uZWN0ZWQiLCJ1c2VyIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJhZGRFbGVtZW50Iiwic3R5bGUiLCJkaXNwbGF5IiwicmVtb3ZlTG9jYWx5Iiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwieGhyU3RhdHMiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwibmJBbnN3ZXJzIiwidHh0SW50cm8iLCJtYXBUZXh0IiwiTkJBTlNXRVJTIiwiTkJRVUVTVElPTk5BSVJFUyIsIm5iUXVlc3Rpb25uYWlyZXMiLCJOQlRPVFFVRVNUSU9OTkFJUkVTIiwiZ3JvdXBzIiwibmJQdWJsaXNoZWQiLCJuYldpdGhvdXRHcm91cFB1Ymxpc2hlZCIsIkFWR0RVUkFUSU9OIiwiYXZnRHVyYXRpb24iLCJBVkdDT1JSRUNUQU5TV0VSUyIsImF2Z0NvcnJlY3RBbnN3ZXJzIiwicmVwbGFjZUFsbCIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInNlbmQiLCJ4aHJMYXN0UXVpenMiLCJuYlRvdCIsImh0bWwiLCJpbm5lckhUTUwiLCJxdWl6cyIsInNlbmRTZWFyY2giLCJ0eXBlIiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJTZWFyY2giLCJoYXNoIiwiYXNzaWduIiwiYmVnaW4iLCJwcmV2aW91c1BhZ2VFbHQiLCJnb0JhY2tSZXMiLCJuZXdCZWdpbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJlbmQiLCJuZXh0UGFnZUVsdCIsIm91dHB1dCIsInN0cmluZ2lmeSIsImNvbnNvbGUiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwiaW5wdXRzQ29uZiIsIm15Rm9ybSIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWVzIiwiZW50cmllIiwiZW1weUZvcm0iLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJub3ciLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsImluZGV4T2YiLCJvbmVycm9yIiwic3RhdHVzVGV4dCJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FB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QUEsR0FBbEIsQyxDQTBFUDs7QUFDQSxJQUFNK0gsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ04sY0FBRCxFQUFpQnhILE9BQWpCLEVBQTBCeUgsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUMvTiwyREFBTyxDQUFDc0csT0FBRCxDQUFYLEVBQ0ltRSxvRUFBVSxDQUFDLFNBQUQsRUFBWW5FLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ3RHLDJEQUFPLENBQUMrTixTQUFELENBQVgsRUFDSXRELG9FQUFVLENBQUMsS0FBRCxFQUFRc0QsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDL04sMkRBQU8sQ0FBQzhOLGNBQUQsQ0FBWCxFQUNJdEgsTUFBTSxDQUFDQyxRQUFQLENBQWdCa0QsTUFBaEIsQ0FBdUJtRSxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2hvbWVVc2VyLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2hvbWVVc2VyLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2Fuc3dlclwiOiBcIi4uL2xhbmcvZnIvYW5zd2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvYW5zd2VyJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvcXVlc3Rpb25uYWlyZVwiOiBcIi4uL2xhbmcvZnIvcXVlc3Rpb25uYWlyZS5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3F1ZXN0aW9ubmFpcmUkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3F1ZXN0aW9ubmFpcmVhY2Nlc3NcIjogXCIuLi9sYW5nL2ZyL3F1ZXN0aW9ubmFpcmVhY2Nlc3MuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9xdWVzdGlvbm5haXJlYWNjZXNzJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwgOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IDx1PjxiPk5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TIHF1ZXN0aW9uczwvYj48L3U+LiBDJ2VzdCBjZXJ0YWluLCB2b3VzIGZlcmV6IG1pZXV4IGxhIHByb2NoYWluZSBmb2lzICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiA8dT48Yj5OQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUyBxdWVzdGlvbnM8L2I+PC91Pi4gQydlc3QgcGFzIG1hbCBkdSB0b3V0ICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogPHU+PGI+TkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMgcXVlc3Rpb25zPC9iPjwvdT4uIEJyYXZvICEgUmllbiBuZSB2b3VzIMOpY2hhcHBlICFcIixcbiAgICBuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIgZGUgc2Vjb25kZXMuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGF1c3NpIMOpbGV2w6kuXCIsXG4gICAgbmVlZE1pbk51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgbmUgcGV1dCDDqnRyZSBpbmbDqXJpZXVyIMOgIDEuXCIsXG4gICAgbmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWROdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIHN1cMOpcmlldXIgYXUgbm9tYnJlIGRlIHF1ZXN0aW9ucy5cIixcbiAgICBuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZi5cIixcbiAgICBuZWVkTWluTnVtYmVyU2Vjb25kZXNSZXNwb25zZSA6IFwiTGEgZHVyw6llIGRlIGxhIHLDqXBvbnNlIG5lIHBldXQgw6p0cmUgbsOpZ2F0aXZlLlwiLFxuICAgIG5vUHJldmlvdXNBbnN3ZXI6IFwiT24gZGlyYWl0IHF1ZSBjJ2VzdCBsYSBwcmVtacOocmUgZm9pcyBxdWUgdm91cyByw6lwb25kZXogw6AgY2UgcXVpei4gQm9ubmUgbGVjdHVyZSAhXCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzTGluZTogXCJMZSBEQVRFQU5TV0VSLCB2b3VzIGF2ZXogcsOpcG9uZHUgY29ycmVjdGVtZW50IMOgIE5CQ09SUkVDVEFOU1dFUlMgcXVlc3Rpb25zIHN1ciBOQlFVRVNUSU9OUyBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcy5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNTdGF0czogXCJFbiBtb3llbm5lLCB2b3VzIGF2ZXogcsOpcG9uZHUgw6AgY2UgcXVpeiBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcywgZW4gYXlhbnQgPGI+QVZHQ09SUkVDVEFOU1dFUlMgJSBkZSBib25uZXMgcsOpcG9uc2VzPC9iPi5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNUaXRsZTogXCJCb25qb3VyICNOT00sIHZvaWNpIHZvcyBwcsOpY8OpZGVudHMgcsOpc3VsdGF0cyDDoCBjZSBxdWl6XCIsXG4gICAgcmVzcG9uc2VTYXZlZEVycm9yIDogXCJDZXBlbmRhbnQgdW5lIGVycmV1ciBhIMOpdMOpIHJlbmNvbnRyw6llIGR1cmFudCBsJ2VucmVnaXN0cmVtZW50IGRlIHZvdHJlIHLDqXN1bHRhdC4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICByZXNwb25zZVNhdmVkTWVzc2FnZSA6IFwiVm90cmUgcsOpc3VsdGF0IGEgw6l0w6kgZW5yZWdpc3Ryw6kuIDxhIGhyZWY9Jy8jVVJMJz5BY2PDqGRlciDDoCB0b3VzIHZvcyBxdWl6czwvYT4uXCIsXG4gICAgc3RhdHNVc2VyOiBcIlZvdXMgYXZleiBlbnJlZ2lzdHLDqSA8Yj5OQkFOU1dFUlMgcsOpcG9uc2VTMSDDoCBOQlFVRVNUSU9OTkFJUkVTIHF1aXpTMiBkaWZmw6lyZW50UzM8L2I+IHN1ciBsZXMgTkJUT1RRVUVTVElPTk5BSVJFUyBwcm9wb3PDqVM0IHBhciBsZSBzaXRlLjxicj5FbiBtb3llbm5lLCB2b3VzIGF2ZXogbWlzIEFWR0RVUkFUSU9OIHNlY29uZGVzIMOgIHLDqXBvbmRyZSBldCBhdmV6IDxiPmNvcnJlY3RlbWVudCByw6lwb25kdSDDoCBBVkdDT1JSRUNUQU5TV0VSUyAlIGRlcyBxdWVzdGlvbnM8L2I+LlwiLFxuICAgIHdhbnRUb1NhdmVSZXNwb25zZXM6IFwiU2kgdm91cyBsZSBzb3VoYWl0ZXosIHZvdXMgcG91dmV6IDx1PjxiPnNhdXZlZ2FyZGVyIHZvdHJlIHLDqXN1bHRhdDwvYj48L3U+IGVuIGNyw6lhbnQgdm90cmUgY29tcHRlIGNpLWRlc3NvdXMuIENlbGEgdm91cyBwZXJtZXR0cmEgYXVzc2kgZGUgPHU+PGI+cmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBcXFwiZ3JhaW5lcyBkZSBjdWx0dXJlXFxcIjwvYj48L3U+IGRpcmVjdGVtZW50IHN1ciB2b3RyZSBlLW1haWwuXCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIiwvLyBkw6lwbGFjw6kgZGFucyBnZW5lcmFsLmpzXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLC8vaWRlbVxuICAgIGJ0blNlbmRSZXNwb25zZTogXCJUZXN0ZXogdm9zIHLDqXBvbnNlcy5cIixcbiAgICBidG5TaGFyZVF1aXpUeHQ6IFwiUGFydGFnZXIgdmlhIFwiLFxuICAgIGJ0blNoYXJlUXVpek1haWxCb2R5OiBcIkJvbmpvdXIsJTBBJTBBVm9pY2klMjB1biUyMGxpZW4lMjBpbnRlcm5ldCUyMHF1aSUyMGRldnJhaXQlMjB0J2ludMOpcmVzc2VyIDolMEFcIiwgICAgXG4gICAgYnRuU2hvd1F1ZXN0aW9ubmFpcmU6IFwiUsOpcG9uZHJlIGF1IHF1aXogIVwiLFxuICAgIGNvcnJlY3RBbnN3ZXJUeHQ6IFwiQm9ubmUgcsOpcG9uc2VcIixcbiAgICBlc3RpbWF0ZWRUaW1lOiBcIkR1csOpZSBkZSBsZWN0dXJlIGVzdGltw6llIDogXCIsXG4gICAgZXN0aW1hdGVkVGltZU9wdGlvbiA6XG4gICAge1xuICAgICAgICBzaG9ydDogXCJjb3VydGVcIixcbiAgICAgICAgbWVkaXVtOiBcIm1veWVubmVcIixcbiAgICAgICAgbG9uZzogXCJsb25ndWVcIlxuICAgIH0sXG4gICAgZXhwbGFuYXRpb25CZWZvcmVUeHQ6IFwiRXh0cmFpdCA6XCIsXG4gICAgaGF2ZUJlZW5QdWJsaXNoZWQgOiBcIjpOQiBub3V2ZWF1eCBxdWVzdGlvbm5haXJlcyBvbnQgw6l0w6kgcHVibGnDqXMuXCIsXG4gICAgaGF2ZUJlZW5SZWdlbmVyYXRlZCA6IFwiTGVzIHBhZ2VzIEhUTUwgZGUgI05CMSBxdWVzdGlvbm5haXJlcyBvdSDDqWzDqW1lbnRzIGRlIGdyb3VwZXMsICNOQjIgcXVpenMgZ3JvdXDDqXMgZXQgI05CMyB0aMOobWVzIG9udCDDqXTDqSByZWfDqW7DqXLDqXMuXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciwgbGUgXCIsXG4gICAgbGlua0dvVG9OZXh0RWxlbWVudDogXCJBcnRpY2xlIHN1aXZhbnRcIixcbiAgICBsaW5rR29Ub1F1aXo6IFwiQWNjw6lkZXIgYXUgcXVpelwiLCAgICBcbiAgICBuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlOiBcIkxhIGRhdGUgZGUgcHVibGljYXRpb24gZm91cm5pZSBuJ2EgcGFzIHVuIGZvcm1hdCB2YWxpZGUuXCIsXG4gICAgbmVlZEVzdGltYXRlZFRpbWU6IFwiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciB1bmUgZXN0aW1hdGlvbiBkZSBsYSBkdXLDqWUgZGUgY2UgcXVpei5cIixcbiAgICBuZWVkR3JvdXBJZlJhbms6IFwiVm91cyBhdmV6IHNhaXNpIHVuIHJhbmcgZGUgY2xhc3NlbWVudCwgc2FucyBzw6lsZWN0aW9ubmVyIGxlIGdyb3VwZSBkdSBxdWl6LlwiLFxuICAgIG5lZWRJbnRyb2R1Y3Rpb246IFwiTWVyY2kgZGUgZm91cm5pciB1biB0ZXh0ZSBkJ2ludHJvZHVjdGlvbiDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRLbm93SWZJc1B1Ymxpc2hlZDogXCJJbCBmYXV0IHNhdm9pciBzaSBjZSBxdWl6IGVzdCBwdWJsacOpLlwiLFxuICAgIG5lZWRMYW5ndWFnZTogXCJWb3VzIGRldmV6IHPDqWxlY3Rpb25uZXIgbGEgbGFuZ3VlIGRlIGNlIHF1aXouXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdUaXRsZTogXCJMZSB0aXRyZSBkdSBxdWl6IG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE51bWJlckZvclJhbms6IFwiVm91cyBkZXZleiBzYWlzaXIgdW4gbm9tYnJlIGVudGllciBwb3VyIGxlIHJhbmcgZGUgY2UgcXVlc3Rpb25uYWlyZSBkYW5zIHNvbiBncm91cGUuXCIsICAgICAgICAgICAgICBcbiAgICBuZWVkVGl0bGU6IFwiTWVyY2kgZGUgZm91cm5pciB1biB0aXRyZSDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRVbmlxdWVVcmw6IFwiTCd1cmwgZHUgcXVpeiBkb2l0IMOqdHJlIHVuaXF1ZS5cIixcbiAgICBuZWVkVXJsOiBcIk1lcmNpIGRlIGZvdXJuaXIgbCd1cmwgw6Agdm90cmUgcXVpei5cIixcbiAgICBuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlOiBcIlByb2NoYWluZSBkYXRlIHNhbnMgcXVpeiBwcm9ncmFtbcOpIDogXCIsXG4gICAgbmV4dFF1ZXN0aW9ubmFpcmVzTGlzdDogXCJMZXMgI05CIHByb2NoYWlucyBxdWl6cyBkZXZhbnQgw6p0cmUgcHVibGnDqXNcIixcbiAgICBxdWVzdGlvbm5haXJlc05hbWU6IFwicXVpelwiLFxuICAgIHF1ZXN0aW9ubmFpcmVOZWVkQmVDb21wbGV0ZWQ6IFwiUXVpeiBpbmNvbXBsZXRcIixcbiAgICBwdWJsaXNoZWRBdDogXCIsIGxlXCIsXG4gICAgcHVibGlzaGVkQnk6IFwiUXVpeiBwdWJsacOpIHBhclwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVSZXN1bHRUaXRsZSA6IFwiUsOpc3VsdGF0IHBvdXIgdm90cmUgcmVjaGVyY2hlXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhOb1Jlc3VsdCA6IFwiQXVjdW4gcXVpeiBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIHZvdHJlIHJlY2hlcmNoZS5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlV2l0aFJlc3VsdCA6IFwiSWwgeSBhICNOQiBhcnRpY2xlI1MgY29ycmVzcG9uZGFudCDDoCB2b3RyZSByZWNoZXJjaGUgOlwiLFxuICAgIHdyb25nQW5zd2VyVHh0OiBcIk1hdXZhaXNlIHLDqXBvbnNlXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGxhc3RRdWVzdGlvbm5haXJlc0ZvclVzZXI6IFwiVm9zIGRlcm5pw6hyZXMgbGVjdHVyZXMgOlwiLFxuICAgIG5vdEZvdW5kIDogXCJMZXMgaW5mb3JtYXRpb25zIGQndW4gcXVlc3Rpb25uYWlyZSBhdHRyaWJ1w6kgw6AgdW4gYWJvbm7DqSBuJ29udCBwYXMgw6l0w6kgdHJvdXbDqWVzIDogXCIsXG4gICAgbm9RdWVzdGlvbm5haXJlQWNjZXNzOiBcIkF1Y3VuIGFydGljbGUgbmUgdm91cyBhIGVuY29yZSDDqXTDqSBlbnZvecOpIHBhciBlLW1haWwuIFNhbnMgZG91dGUsIHZlbmV6LXZvdXMgZGUgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gRW4gYXR0ZW5kYW50IGQnZW4gcmVjZXZvaXIsIHZvdXMgcG91dmV6IG1pZXV4IGTDqWNvdXZyaXIgbGUgc2l0ZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2EtcHJvcG9zLmh0bWxcXFwiPmVuIGxpc2FudCBsYSBwYWdlIMOgIHByb3BvczwvYT4gb3UgZW5jb3JlIGNvbW1lbmNlciDDoCBwYXJjb3VyaXIgbGlicmVtZW50IHNvbiBjb250ZW51IMOgIGwnYWlkZSBkdSBtb3RldXIgZGUgcmVjaGVyY2hlIGNpLWRlc3N1cy5cIixcbiAgICBxdWVzdGlvbm5haXJlUmV0cnlJbmZvIDogXCJWb3VzIGF2ZXogZMOpasOgIHJlw6d1IHRvdXMgbGVzIGFydGljbGVzIGV0IHF1aXpzIHB1Ymxpw6lzIMOgIGNlIGpvdXIuIEVuIGF0dGVuZGFudCBsYSBwdWJsaWNhdGlvbiBkZSBub3V2ZWF1eCBjb250ZW51cywgdm91cyBwb3V2ZXogcGV1dC3DqnRyZSByw6llc3NheWVyIGRlIHLDqXBvbmRyZSBhdSBxdWl6IHN1aXZhbnQgP1wiLFxuICAgIHF1ZXN0aW9ubmFpcmVSZXRyeUluZm9UeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgYXZleiBkw6lqw6AgcmXDp3UgdG91cyBsZXMgcXVpenMgcHVibGnDqXMgw6AgY2Ugam91ciAhIEVuIGF0dGVuZGFudCBsYSBwdWJsaWNhdGlvbiBkZSBub3V2ZWF1eCBxdWl6cywgdm91cyBwb3V2ZXogcGV1dC3DqnRyZSByw6llc3NheWVyIGxlIHN1aXZhbnQgP1xcblxcblFVRVNUSU9OTkFJUkVfVVJMXFxuXFxuQm9ubmUgbGVjdHVyZSAhXFxuXFxuU3RvcHBlciBsZXMgZW52b2lzID9cXG5VTlNVQlNDUklCRV9VUkxcIixcbiAgICBzZWFyY2hJc05vdExvbmdFbm91Z2ggOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90LWNsw6lzIGQnYXUgbW9pbnMgZGV1eCBjYXJhY3TDqHJlcyBwb3VyIHZvdHJlIHJlY2hlcmNoZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBQQUdFIEQnQUNDVUVJTCBERSBMJ1VUSUxJU0FURVVSXG5cbi8vLyBWw6lyaWZpZXIgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2VyIHZlcnMgbGUgZm9ybXVsYWlyZSBkJ2luc2NyaXB0aW9uIHNpIGNlIG4nZXN0IHBhcyBsZSBjYXMuXG4vLy8gU2kgYydlc3Qgb2ssIG9uIHLDqWN1cMOocmUgc2VzIGluZm9zIGV0IHN0YXRzICsgbGVzIGRlcm5pZXJzIHF1aXpzIGF1eHF1ZWxzIGlsIGEgYWNjw6hzLCBtYWlzIG4nYSBwYXMgcsOpcG9uZHUuXG4vLy8gVW4gbW90ZXVyIGRlIHJlY2hlcmNoZSBwZXJtZXQgZCdvYnRlbmlyIGQnYXV0cmVzIHF1aXpzIHBhcm1pIGNldXggcHVibGnDqXMuXG4vLy8gUG91ciBsJ2FmZmljaGFnZSBkZXMgbGlzdGluZ3MgZGUgcXVpeiwgbCdBUEkgcmV0b3VybmUgZGlyZWN0ZW1lbnQgZHUgaHRtbC5cbi8vLyBVbiBtZW51IHBlcm1ldCDDoCBsJ3V0aWxpc2F0ZXVyIGQnYWNjw6lkZXIgw6AgbGEgbW9kaWZpY2F0aW9uIGRlIHNlcyBpbmZvcywgZGUgc29uIGFib25uZW1lbnQsIGV0Yy5cbi8vLyBVbiBtZXNzYWdlIHZlbmFudCBkJ3VuZSBhdXRyZSBwYWdlIHBldXQgYXVzc2kgw6p0cmUgw6AgYWZmaWNoZXIgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuY29uc3QgeyBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlLCBnZXRTdGF0c0Fuc3dlcnMsIHF1ZXN0aW9ubmFpcmVSb3V0ZXMsIHNlYXJjaFF1ZXN0aW9ubmFpcmVzLCBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIH0gPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzXCIpO1xuY29uc3QgeyBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUsIHVzZXJSb3V0ZXMgfSA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvdXNlcnNcIik7XG5cbi8vIEZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHsgc3RhdHNVc2VyIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2Fuc3dlclwiKTtcbmNvbnN0IHsgbmV4dFBhZ2UsIHByZXZpb3VzUGFnZSwgc2VydmVyRXJyb3IgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHsgc2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhSZXN1bHQsIHNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoTm9SZXN1bHQgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvcXVlc3Rpb25uYWlyZVwiKTtcbmNvbnN0IHsgbGFzdFF1ZXN0aW9ubmFpcmVzRm9yVXNlciwgbm9RdWVzdGlvbm5haXJlQWNjZXNzIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3F1ZXN0aW9ubmFpcmVhY2Nlc3NcIik7XG5jb25zdCB7IG5lZWRCZUNvbm5lY3RlZCwgd2VsY29tZU1lc3NhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGRpdk1haW49IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFpbi1jb250ZW50XCIpO1xuY29uc3QgZGl2Q3Jhc2g9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3Jhc2hcIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgcXVpekludHJvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWl6c0ludHJvXCIpO1xuY29uc3QgcXVpekxpc3RpbmcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1aXpzTGlzdFwiKTtcbmNvbnN0IHF1aXpQYWdpbmF0aW9uUHJldmlvdXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByZXZpb3VzXCIpO1xuY29uc3QgcXVpelBhZ2luYXRpb25OZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXh0XCIpO1xuY29uc3QgZm9ybVNlYXJjaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VhcmNoXCIpO1xuY29uc3QgaW5wdXRCZWdpbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmVnaW5cIik7XG5jb25zdCBidG5SYW5kb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJhbmRvbVwiKTtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIG4nZXN0IHBhcyBjb25uZWN0w6ksIHBhcyBsYSBwZWluZSBkJ2FsbGVyICsgbG9pbiA6XG4gICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihbXCJ1c2VyXCJdLCBcIi9cIitjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSwgeyBtZXNzYWdlOiBuZWVkQmVDb25uZWN0ZWQsIGNvbG9yOlwiZXJyb3JcIiB9LCB3aW5kb3cubG9jYXRpb24pO1xuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKTtcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJoMVwiLCB3ZWxjb21lTWVzc2FnZS5yZXBsYWNlKFwiI05BTUVcIiwgdXNlci5uYW1lKSk7XG4gICAgICAgICAgICBkaXZNYWluLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoZ2V0TG9jYWx5KFwibWVzc2FnZVwiKSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5tZXNzYWdlLCBcIlwiLCBbZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5jb2xvcl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJtZXNzYWdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSW5pdGlhbGlzYXRpb24gZHUgZm9ybXVsYWlyZSBkZSByZWNoZXJjaGUgOlxuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKHsgXCJzZWFyY2hRdWVzdGlvbm5haXJlc1wiOiBzZWFyY2hRdWVzdGlvbm5haXJlcyB9LCBmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgIC8vIExlcyBzdGF0cyA6ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCB4aHJTdGF0cyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgeGhyU3RhdHMub3BlbihcIkdFVFwiLCBhcGlVcmwrcXVlc3Rpb25uYWlyZVJvdXRlcytnZXRTdGF0c0Fuc3dlcnMrdXNlci5pZCk7XG4gICAgICAgICAgICB4aHJTdGF0cy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiAhaXNFbXB0eShyZXNwb25zZS5uYkFuc3dlcnMpICYmIHJlc3BvbnNlLm5iQW5zd2VycyE9PTApLy8gcGFzIGRlIHN0YXRzIHNpIGF1Y3VuZSByw6lwb25zZSAhXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0eHRJbnRybz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBOQkFOU1dFUlMgOiByZXNwb25zZS5uYkFuc3dlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBOQlFVRVNUSU9OTkFJUkVTIDogcmVzcG9uc2UubmJRdWVzdGlvbm5haXJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CVE9UUVVFU1RJT05OQUlSRVMgOiByZXNwb25zZS5ncm91cHMubmJQdWJsaXNoZWQrcmVzcG9uc2UucXVlc3Rpb25uYWlyZXMubmJXaXRob3V0R3JvdXBQdWJsaXNoZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBBVkdEVVJBVElPTiA6IHJlc3BvbnNlLmF2Z0R1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZHQ09SUkVDVEFOU1dFUlMgOiByZXNwb25zZS5hdmdDb3JyZWN0QW5zd2Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExhIHNpdHVhdGlvbiBlc3QgcGx1cmllbGxlLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eHRJbnRybz1yZXBsYWNlQWxsKHN0YXRzVXNlciwgbWFwVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eHRJbnRybz0ocmVzcG9uc2UubmJBbnN3ZXJzID4gMSkgPyB0eHRJbnRyby5yZXBsYWNlKFwiUzFcIiwgXCJzXCIpIDogdHh0SW50cm8ucmVwbGFjZShcIlMxXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHh0SW50cm89KHJlc3BvbnNlLm5iUXVlc3Rpb25uYWlyZXMgPiAxKSA/IHR4dEludHJvLnJlcGxhY2UoXCJTMlwiLCBcInNcIikucmVwbGFjZShcIlMzXCIsIFwic1wiKSA6IHR4dEludHJvLnJlcGxhY2UoXCJTMlwiLCBcIlwiKS5yZXBsYWNlKFwiUzNcIiwgXCJzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHh0SW50cm89KG1hcFRleHQuTkJUT1RRVUVTVElPTk5BSVJFUyA+IDEpID8gdHh0SW50cm8ucmVwbGFjZShcIlM0XCIsIFwic1wiKSA6IHR4dEludHJvLnJlcGxhY2UoXCJTNFwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHR4dEludHJvLCBcIlwiLCBcIlwiLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHJTdGF0cy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTsgXG4gICAgICAgICAgICB4aHJTdGF0cy5zZW5kKCk7XG5cbiAgICAgICAgICAgIC8vIFBhciBkw6lmYXV0LCBvbiBhZmZpY2hlIGRlcyBkZXJuaWVycyDDqWzDqW1lbnRzIHN1cHBvc8OpcyBsdXMgcGFyIGwndXRpbGlzYXRldXIgOlxuICAgICAgICAgICAgY29uc3QgeGhyTGFzdFF1aXpzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHJMYXN0UXVpenMub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUrXCJcIit1c2VyLmlkK1wiL1wiKzArXCIvXCIrY29uZmlnVGVtcGxhdGUubmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZStcIi9odG1sXCIpO1xuICAgICAgICAgICAgeGhyTGFzdFF1aXpzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5uYlRvdCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpJbnRybywgXCJwXCIsIG5vUXVlc3Rpb25uYWlyZUFjY2VzcywgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHJlc3BvbnNlLmh0bWwpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6SW50cm8sIFwicFwiLCBsYXN0UXVlc3Rpb25uYWlyZXNGb3JVc2VyLCBcIlwiLCBbXCJpbmZvXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWl6TGlzdGluZy5pbm5lckhUTUw9cmVzcG9uc2UuaHRtbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpzLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTsvLyByZXZvaXIgc2kgaW50w6lyw6p0IGQnYWZmaWNoZXIgcXVlbHF1ZSBjaG9zZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQocXVpenMsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pOyAvLyBpZGVtXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeGhyTGFzdFF1aXpzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgeGhyTGFzdFF1aXpzLnNlbmQoKTtcblxuICAgICAgICAgICAgLy8gVHJhaXRlbWVudCBkdSBsYW5jZW1lbnQgZCd1bmUgcmVjaGVyY2hlXG4gICAgICAgICAgICAvLyBMYSByZWNoZXJjaGUgcGV1dCDDqnRyZSBsYW5jw6llIHZpYSBsYSBib3V0b24gc3VibWl0IG91IHVuIGxpZW4gZGUgcGFnaW5hdGlvblxuICAgICAgICAgICAgY29uc3Qgc2VuZFNlYXJjaCA9ICh0eXBlPVwic2VhcmNoXCIpID0+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcXVpekxpc3RpbmcuaW5uZXJIVE1MPVwiXCIrXCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1TZWFyY2gpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHhoclNlYXJjaCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIGlmKHR5cGU9PVwic2VhcmNoXCIpXG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrcXVlc3Rpb25uYWlyZVJvdXRlcytzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHR5cGU9PVwicmFuZG9tXCIpXG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrcXVlc3Rpb25uYWlyZVJvdXRlcytnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlKTtcbiAgICAgICAgICAgICAgICB4aHJTZWFyY2gub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiAhaXNFbXB0eShyZXNwb25zZS5uYlRvdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UubmJUb3Q9PT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6SW50cm8sIFwicFwiLCBzZWFyY2hRdWVzdGlvbm5haXJlV2l0aE5vUmVzdWx0LCBcIlwiLCBbXCJpbmZvXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjsvLyBzaW5vbiBsZXMgaGFzaCBzJ2VuY2hhw65uZW50Li4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVpenNJbnRyb1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihyZXNwb25zZS5odG1sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR4dEludHJvPXNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoUmVzdWx0LnJlcGxhY2UoXCIjTkJcIiwgcmVzcG9uc2UubmJUb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRJbnRybz0ocmVzcG9uc2UubmJUb3QgPiAxKSA/IHR4dEludHJvLnJlcGxhY2UoXCIjU1wiLFwic1wiKSA6IHR4dEludHJvLnJlcGxhY2UoXCIjU1wiLFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpJbnRybywgXCJwXCIsIHR4dEludHJvICwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aXpMaXN0aW5nLmlubmVySFRNTD1yZXNwb25zZS5odG1sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3F1aXpzSW50cm9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhZ2luYXRpb24gbsOpY2Vzc2FpcmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbiBjb21tZW5jZSBwYXIgdmlkZXIuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpelBhZ2luYXRpb25QcmV2aW91cy5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpelBhZ2luYXRpb25OZXh0LmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5iZWdpbiAhPSAwKS8vIHBldXQgcmV0b3VybmVyIFwiMFwiIGV0IG5vbiAwICFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6UGFnaW5hdGlvblByZXZpb3VzLCBcImFcIiwgXCI8PCBcIitwcmV2aW91c1BhZ2UgLCBcInByZXZpb3VzUmVzXCIsIFtcImJ1dHRvblwiXSwgeyBocmVmOiBcIiNzZWFyY2hcIiB9KTsgLy8gcmV2b2lyLCBsZXMgXCI8PFwiIHBvdXJyYWllbnQgw6p0cmUgZ8OpcsOpZXMgcGFyIGxlIENTU1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNQYWdlRWx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHJldmlvdXNSZXNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZSByZXRvdXIgw6AgbGEgcGFnZSBwcsOpY8OpZGVudGUgcGV1dCBzZSBmYWlyZSBlbiBjbGlxdWFudCBzdXIgbGUgYm91dG9uIG91IHZpYSBsJ2hpc3RvcmlxdWUgZHUgbmF2aWdhdGV1clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29CYWNrUmVzID0gKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3QmVnaW49cmVzcG9uc2UuYmVnaW4tY29uZmlnVGVtcGxhdGUubmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuZXdCZWdpbjwwKSAvLyBuZSBkZXZyYWl0IHBhcyDDqnRyZSBwb3NzaWJsZS4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0JlZ2luPTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWdpblwiKS52YWx1ZT1uZXdCZWdpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kU2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3F1aXpzSW50cm9cIik7Ly8gcG91ciByZW1vbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNQYWdlRWx0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb0JhY2tSZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VtYmxlIHByb3ZvcXXDqSBidWcgPz8/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvQmFja1JlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmVuZCA8IChyZXNwb25zZS5uYlRvdC0xKSkvLyAtMSwgY2FyIHRhYmxlYXUgY29tbWVuY2Ugw6AgMCAhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQocXVpelBhZ2luYXRpb25OZXh0LCBcImFcIiwgbmV4dFBhZ2UrIFwiID4+XCIsIFwibmV4dFJlc1wiLCBbXCJidXR0b25cIl0sIHsgaHJlZjogXCIjc2VhcmNoXCIgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFBhZ2VFbHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXh0UmVzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dFBhZ2VFbHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmVnaW5cIikudmFsdWU9cmVzcG9uc2UuZW5kKzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFNlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoPVwiXCI7Ly8gc2lub24gbGVzIGhhc2ggcydlbmNoYcOubmVudC4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVpenNJbnRyb1wiKTsgLy8gcG91ciByZW1vbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpzLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpzLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXMub3V0cHV0PVwiaHRtbFwiO1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnRuUmFuZG9tLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZ2luXCIpLnZhbHVlPTA7XG4gICAgICAgICAgICAgICAgc2VuZFNlYXJjaChcInJhbmRvbVwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBmb3JtU2VhcmNoLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWdpblwiKS52YWx1ZT0wO1xuICAgICAgICAgICAgICAgIHNlbmRTZWFyY2goKTtcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICBcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgYWRkRWxlbWVudChkaXZDcmFzaCwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgPSAoaW5wdXRzQ29uZiwgbXlGb3JtKSA9Plxue1xuICAgIGZvcihsZXQgaSBpbiBteUZvcm0uZWxlbWVudHMpXG4gICAge1xuICAgICAgICBpZighaXNFbXB0eShteUZvcm0uZWxlbWVudHNbaV0uaWQpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgaWRJbnB1dD1teUZvcm0uZWxlbWVudHNbaV0uaWQ7XG4gICAgICAgICAgICBpZihpbnB1dHNDb25mW2lkSW5wdXRdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dEhUTUw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRJbnB1dCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIGluIGlucHV0c0NvbmZbaWRJbnB1dF0pXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SFRNTC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbnB1dHNDb25mW2lkSW5wdXRdW2F0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBSw6ljdXDDqHJlIHRvdXRlcyBsZXMgdmFsZXVycyBkZSBjaGFtcHMgZW4gb21ldHRhbnQgbGVzIGNoZWNrYm94IG5vbiBjb2Now6llcywgZXRjLlxuZXhwb3J0IGNvbnN0IGdldERhdGFzRnJvbUlucHV0cyA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZGF0YXM9e307XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAgICAgZGF0YXNbZW50cmllWzBdXT1lbnRyaWVbMV07XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBWaWRlIHRvdXMgbGVzIGNoYW1wcyBkJ3VuIGZvcm11bGFpcmUsIHkgY29tcHJpcyBoaWRkZW4sIGNoZWNrYm94LCBldGMuXG4vLyBSZXZvaXIgcG91ciBsZXMgc2VsZWN0XG5leHBvcnQgY29uc3QgZW1weUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgIHtcbiAgICAgICAgaWYobXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJjaGVja2JveFwiIHx8IG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwicmFkaW9cIilcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLmNoZWNrZWQ9ZmFsc2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnZhbHVlPVwiXCI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8gVmlkZSBldCBjYWNoZSBsZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgZW1weUFuZEhpZGVGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBlbXB5Rm9ybShteUZvcm0pO1xuICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9xdWVzdGlvbm5haXJlJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmVhY2Nlc3MkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvYW5zd2VyLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvcXVlc3Rpb25uYWlyZS5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlYWNjZXNzLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9tZVVzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiZGVmYXVsdFJlY2VpcHREYXlzIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsImZpZWxkTmV3UXVlc3Rpb25uYWlyZXMiLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbiIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4IiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmVzIiwiZGlyV2ViUXVlc3Rpb25uYWlyZXMiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInJlZ2VuZXJhdGVIVE1MIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdyb3VwUm91dGVzIiwiZ2V0R3JvdXBSb3V0ZSIsInByZXZpZXdHcm91cFJvdXRlcyIsInNlYXJjaEdyb3Vwc1JvdXRlIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRBZG1pblN0YXRzIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwiLCJjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIiwiY2hlY2tSZXNwb25zZXNPdXB1dFN1Y2Nlc3MiLCJuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UiLCJuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNaW5OdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZE1pbk51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyU2Vjb25kZXNSZXNwb25zZSIsIm5vUHJldmlvdXNBbnN3ZXIiLCJwcmV2aW91c0Fuc3dlcnNMaW5lIiwicHJldmlvdXNBbnN3ZXJzU3RhdHMiLCJwcmV2aW91c0Fuc3dlcnNUaXRsZSIsInJlc3BvbnNlU2F2ZWRFcnJvciIsInJlc3BvbnNlU2F2ZWRNZXNzYWdlIiwic3RhdHNVc2VyIiwid2FudFRvU2F2ZVJlc3BvbnNlcyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYnRuU2VuZFJlc3BvbnNlIiwiYnRuU2hhcmVRdWl6VHh0IiwiYnRuU2hhcmVRdWl6TWFpbEJvZHkiLCJidG5TaG93UXVlc3Rpb25uYWlyZSIsImNvcnJlY3RBbnN3ZXJUeHQiLCJlc3RpbWF0ZWRUaW1lIiwiZXN0aW1hdGVkVGltZU9wdGlvbiIsIm1lZGl1bSIsImV4cGxhbmF0aW9uQmVmb3JlVHh0IiwiaGF2ZUJlZW5QdWJsaXNoZWQiLCJoYXZlQmVlblJlZ2VuZXJhdGVkIiwibGFzdFVwZGF0ZWQiLCJsaW5rR29Ub05leHRFbGVtZW50IiwibGlua0dvVG9RdWl6IiwibmVlZENvcnJlY3RQdWJsaXNoaW5nRGF0ZSIsIm5lZWRFc3RpbWF0ZWRUaW1lIiwibmVlZEdyb3VwSWZSYW5rIiwibmVlZEludHJvZHVjdGlvbiIsIm5lZWRLbm93SWZJc1B1Ymxpc2hlZCIsIm5lZWRMYW5ndWFnZSIsIm5lZWROb3RUb29Mb25nVGl0bGUiLCJuZWVkTnVtYmVyRm9yUmFuayIsIm5lZWRUaXRsZSIsIm5lZWRVbmlxdWVVcmwiLCJuZWVkVXJsIiwibmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZSIsIm5leHRRdWVzdGlvbm5haXJlc0xpc3QiLCJxdWVzdGlvbm5haXJlc05hbWUiLCJxdWVzdGlvbm5haXJlTmVlZEJlQ29tcGxldGVkIiwicHVibGlzaGVkQXQiLCJwdWJsaXNoZWRCeSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVSZXN1bHRUaXRsZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoTm9SZXN1bHQiLCJzZWFyY2hRdWVzdGlvbm5haXJlV2l0aFJlc3VsdCIsIndyb25nQW5zd2VyVHh0IiwibGFzdFF1ZXN0aW9ubmFpcmVzRm9yVXNlciIsIm5vdEZvdW5kIiwibm9RdWVzdGlvbm5haXJlQWNjZXNzIiwicXVlc3Rpb25uYWlyZVJldHJ5SW5mbyIsInF1ZXN0aW9ubmFpcmVSZXRyeUluZm9UeHQiLCJzZWFyY2hJc05vdExvbmdFbm91Z2giLCJhbHJlYWR5Q29ubmVjdGVkIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiYmFkUGFzc3dvcmQiLCJieWVieWVNZXNzYWdlIiwiY29ubmVjdGlvbk9rIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiZmFpbEJvdFRlc3QiLCJmYWlsQm90VGVzdExvZyIsImZvcm1zRW1haWxMYWJlbCIsImZvcm1zRW1haWxQbGFjZWhvbGRlciIsImZvcm1zRW1haWwyUGxhY2Vob2xkZXIiLCJmb3Jtc0NHVU9rTGFiZWwiLCJmb3Jtc1N1Ym1pdFR4dCIsImdvZGZhdGhlckZvdW5kIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc1VzZXJOYkdvZENoaWxkcyIsImluZm9zVXNlck5vR29kY2hpbGRzIiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luTGlua1R4dCIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtUeHQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVMaW5rVHh0IiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibmVlZEJlQ29ubmVjdGVkIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZEVtYWlsIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkTG9uZ1Bhc3NXb3JkIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZFN0YXR1cyIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsInBhc3N3b3JkQ29waWVkIiwic2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0IiwidG9vTWFueUxvZ2luRmFpbHMiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ3ZWxjb21lTWVzc2FnZSIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsImkiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJ0YWdzTGlzdFR4dCIsImFib3V0UGFnZSIsImNndVBhZ2UiLCJkZWxldGVMaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJ1c2VySG9tZVBhZ2VUeHQiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJtYWlsUmVjaXBpZW50VHh0IiwibGljZW5jZVR4dCIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsImhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZSIsIm5ld3NMaXN0VGl0bGUiLCJ0YWdMaXN0VGl0bGUiLCJ0YWdMaXN0TWV0YURlc2MiLCJ0YWdMaXN0SW50cm8iLCJhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQiLCJxdWl6RWxlbWVudExpbmtzSW50cm8iLCJxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlIiwiZXhwbGFuYXRpb25FbGVtZW50VHh0IiwidHdpdHRlckFjY291bnQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsImNvbmZpZ1RlbXBsYXRlIiwiZGl2TWFpbiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZDcmFzaCIsImRpdk1lc3NhZ2UiLCJxdWl6SW50cm8iLCJxdWl6TGlzdGluZyIsInF1aXpQYWdpbmF0aW9uUHJldmlvdXMiLCJxdWl6UGFnaW5hdGlvbk5leHQiLCJmb3JtU2VhcmNoIiwiaW5wdXRCZWdpbiIsImJ0blJhbmRvbSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImlzQ29ubmVjdGVkIiwiY2hlY2tTZXNzaW9uIiwibWVzc2FnZSIsImNvbG9yIiwid2luZG93IiwibG9jYXRpb24iLCJ1c2VyIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJhZGRFbGVtZW50Iiwic3R5bGUiLCJkaXNwbGF5IiwicmVtb3ZlTG9jYWx5Iiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwieGhyU3RhdHMiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwibmJBbnN3ZXJzIiwidHh0SW50cm8iLCJtYXBUZXh0IiwiTkJBTlNXRVJTIiwiTkJRVUVTVElPTk5BSVJFUyIsIm5iUXVlc3Rpb25uYWlyZXMiLCJOQlRPVFFVRVNUSU9OTkFJUkVTIiwiZ3JvdXBzIiwibmJQdWJsaXNoZWQiLCJuYldpdGhvdXRHcm91cFB1Ymxpc2hlZCIsIkFWR0RVUkFUSU9OIiwiYXZnRHVyYXRpb24iLCJBVkdDT1JSRUNUQU5TV0VSUyIsImF2Z0NvcnJlY3RBbnN3ZXJzIiwicmVwbGFjZUFsbCIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInNlbmQiLCJ4aHJMYXN0UXVpenMiLCJuYlRvdCIsImh0bWwiLCJpbm5lckhUTUwiLCJxdWl6cyIsInNlbmRTZWFyY2giLCJ0eXBlIiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJTZWFyY2giLCJoYXNoIiwiYXNzaWduIiwiYmVnaW4iLCJwcmV2aW91c1BhZ2VFbHQiLCJnb0JhY2tSZXMiLCJuZXdCZWdpbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJlbmQiLCJuZXh0UGFnZUVsdCIsIm91dHB1dCIsInN0cmluZ2lmeSIsImNvbnNvbGUiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwiaW5wdXRzQ29uZiIsIm15Rm9ybSIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWUiLCJlbnRyaWVzIiwiZW1weUZvcm0iLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJub3ciLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsImluZGV4T2YiLCJvbmVycm9yIiwic3RhdHVzVGV4dCJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtR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SCxpQkFKRCxNQU1JQSxPQUFPLENBQUMsSUFBRCxDQUFQO0FBQ1A7QUFDSixhQXpCRCxNQTJCQTtBQUNJL0csb0ZBQVksQ0FBQyxNQUFELENBQVo7QUFDQWtILDBCQUFZLENBQUNOLGNBQUQsRUFBaUJ2SCxPQUFqQixFQUEwQndILFNBQTFCLENBQVo7QUFDQUUscUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLFdBbENELE1Bb0NBO0FBQ0kvRyxrRkFBWSxDQUFDLE1BQUQsQ0FBWjtBQUNBa0gsd0JBQVksQ0FBQ04sY0FBRCxFQUFpQnZILE9BQWpCLEVBQTBCd0gsU0FBMUIsQ0FBWjtBQUNBRSxtQkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNIO0FBQ0osU0E1Q0Q7O0FBNkNBSyxXQUFHLENBQUNRLE9BQUosR0FBYyxNQUFNWixNQUFNLENBQUNJLEdBQUcsQ0FBQ1MsVUFBTCxDQUExQjs7QUFDQVQsV0FBRyxDQUFDdkYsSUFBSjtBQUNIO0FBQ0o7QUFDSixHQXRFTSxDQUFQO0FBdUVILENBekVNLEMsQ0EwRVA7O0FBQ0EsTUFBTXFGLFlBQVksR0FBRyxDQUFDTixjQUFELEVBQWlCdkgsT0FBakIsRUFBMEJ3SCxTQUExQixLQUNyQjtBQUNJLE1BQUcsQ0FBQy9OLDJEQUFPLENBQUN1RyxPQUFELENBQVgsRUFDSWtFLG9FQUFVLENBQUMsU0FBRCxFQUFZbEUsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDdkcsMkRBQU8sQ0FBQytOLFNBQUQsQ0FBWCxFQUNJdEQsb0VBQVUsQ0FBQyxLQUFELEVBQVFzRCxTQUFSLENBQVY7QUFDSixNQUFHLENBQUMvTiwyREFBTyxDQUFDOE4sY0FBRCxDQUFYLEVBQ0lySCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JpRCxNQUFoQixDQUF1Qm1FLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvaG9tZVVzZXIuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaG9tZVVzZXIuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvYW5zd2VyXCI6IFwiLi4vbGFuZy9mci9hbnN3ZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9hbnN3ZXIkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9xdWVzdGlvbm5haXJlXCI6IFwiLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvcXVlc3Rpb25uYWlyZSRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvcXVlc3Rpb25uYWlyZWFjY2Vzc1wiOiBcIi4uL2xhbmcvZnIvcXVlc3Rpb25uYWlyZWFjY2Vzcy5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3F1ZXN0aW9ubmFpcmVhY2Nlc3MkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0RmFpbCA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogPHU+PGI+TkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMgcXVlc3Rpb25zPC9iPjwvdT4uIEMnZXN0IGNlcnRhaW4sIHZvdXMgZmVyZXogbWlldXggbGEgcHJvY2hhaW5lIGZvaXMgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0gOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IDx1PjxiPk5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TIHF1ZXN0aW9uczwvYj48L3U+LiBDJ2VzdCBwYXMgbWFsIGR1IHRvdXQgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRTdWNjZXNzIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiA8dT48Yj5OQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUyBxdWVzdGlvbnM8L2I+PC91Pi4gQnJhdm8gISBSaWVuIG5lIHZvdXMgw6ljaGFwcGUgIVwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyU2Vjb25kZXNSZXNwb25zZSA6IFwiTGEgZHVyw6llIGRlIGxhIHLDqXBvbnNlIGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllciBkZSBzZWNvbmRlcy5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IG5lIHBldXQgw6p0cmUgYXVzc2kgw6lsZXbDqS5cIixcbiAgICBuZWVkTWluTnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGluZsOpcmlldXIgw6AgMS5cIixcbiAgICBuZWVkTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgZG9pdCDDqnRyZSBmb3VybmkuXCIsXG4gICAgbmVlZE51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgZG9pdCDDqnRyZSBmb3VybmkuXCIsXG4gICAgbmVlZE1heE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIG5lIHBldXQgw6p0cmUgc3Vww6lyaWV1ciBhdSBub21icmUgZGUgcXVlc3Rpb25zLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIG7DqWdhdGlmLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIDogXCJMYSBkdXLDqWUgZGUgbGEgcsOpcG9uc2UgbmUgcGV1dCDDqnRyZSBuw6lnYXRpdmUuXCIsXG4gICAgbm9QcmV2aW91c0Fuc3dlcjogXCJPbiBkaXJhaXQgcXVlIGMnZXN0IGxhIHByZW1pw6hyZSBmb2lzIHF1ZSB2b3VzIHLDqXBvbmRleiDDoCBjZSBxdWl6LiBCb25uZSBsZWN0dXJlICFcIixcbiAgICBwcmV2aW91c0Fuc3dlcnNMaW5lOiBcIkxlIERBVEVBTlNXRVIsIHZvdXMgYXZleiByw6lwb25kdSBjb3JyZWN0ZW1lbnQgw6AgTkJDT1JSRUNUQU5TV0VSUyBxdWVzdGlvbnMgc3VyIE5CUVVFU1RJT05TIGVuIEFWR0RVUkFUSU9OIHNlY29uZGVzLlwiLFxuICAgIHByZXZpb3VzQW5zd2Vyc1N0YXRzOiBcIkVuIG1veWVubmUsIHZvdXMgYXZleiByw6lwb25kdSDDoCBjZSBxdWl6IGVuIEFWR0RVUkFUSU9OIHNlY29uZGVzLCBlbiBheWFudCA8Yj5BVkdDT1JSRUNUQU5TV0VSUyAlIGRlIGJvbm5lcyByw6lwb25zZXM8L2I+LlwiLFxuICAgIHByZXZpb3VzQW5zd2Vyc1RpdGxlOiBcIkJvbmpvdXIgI05PTSwgdm9pY2kgdm9zIHByw6ljw6lkZW50cyByw6lzdWx0YXRzIMOgIGNlIHF1aXpcIixcbiAgICByZXNwb25zZVNhdmVkRXJyb3IgOiBcIkNlcGVuZGFudCB1bmUgZXJyZXVyIGEgw6l0w6kgcmVuY29udHLDqWUgZHVyYW50IGwnZW5yZWdpc3RyZW1lbnQgZGUgdm90cmUgcsOpc3VsdGF0LiA8YSBocmVmPScvI1VSTCc+QWNjw6hkZXIgw6AgdG91cyB2b3MgcXVpenM8L2E+LlwiLFxuICAgIHJlc3BvbnNlU2F2ZWRNZXNzYWdlIDogXCJWb3RyZSByw6lzdWx0YXQgYSDDqXTDqSBlbnJlZ2lzdHLDqS4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICBzdGF0c1VzZXI6IFwiVm91cyBhdmV6IGVucmVnaXN0csOpIDxiPk5CQU5TV0VSUyByw6lwb25zZVMxIMOgIE5CUVVFU1RJT05OQUlSRVMgcXVpelMyIGRpZmbDqXJlbnRTMzwvYj4gc3VyIGxlcyBOQlRPVFFVRVNUSU9OTkFJUkVTIHByb3Bvc8OpUzQgcGFyIGxlIHNpdGUuPGJyPkVuIG1veWVubmUsIHZvdXMgYXZleiBtaXMgQVZHRFVSQVRJT04gc2Vjb25kZXMgw6AgcsOpcG9uZHJlIGV0IGF2ZXogPGI+Y29ycmVjdGVtZW50IHLDqXBvbmR1IMOgIEFWR0NPUlJFQ1RBTlNXRVJTICUgZGVzIHF1ZXN0aW9uczwvYj4uXCIsXG4gICAgd2FudFRvU2F2ZVJlc3BvbnNlczogXCJTaSB2b3VzIGxlIHNvdWhhaXRleiwgdm91cyBwb3V2ZXogPHU+PGI+c2F1dmVnYXJkZXIgdm90cmUgcsOpc3VsdGF0PC9iPjwvdT4gZW4gY3LDqWFudCB2b3RyZSBjb21wdGUgY2ktZGVzc291cy4gQ2VsYSB2b3VzIHBlcm1ldHRyYSBhdXNzaSBkZSA8dT48Yj5yZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIFxcXCJncmFpbmVzIGRlIGN1bHR1cmVcXFwiPC9iPjwvdT4gZGlyZWN0ZW1lbnQgc3VyIHZvdHJlIGUtbWFpbC5cIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLC8vIGTDqXBsYWPDqSBkYW5zIGdlbmVyYWwuanNcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsLy9pZGVtXG4gICAgYnRuU2VuZFJlc3BvbnNlOiBcIlRlc3RleiB2b3MgcsOpcG9uc2VzLlwiLFxuICAgIGJ0blNoYXJlUXVpelR4dDogXCJQYXJ0YWdlciB2aWEgXCIsXG4gICAgYnRuU2hhcmVRdWl6TWFpbEJvZHk6IFwiQm9uam91ciwlMEElMEFWb2ljaSUyMHVuJTIwbGllbiUyMGludGVybmV0JTIwcXVpJTIwZGV2cmFpdCUyMHQnaW50w6lyZXNzZXIgOiUwQVwiLCAgICBcbiAgICBidG5TaG93UXVlc3Rpb25uYWlyZTogXCJSw6lwb25kcmUgYXUgcXVpeiAhXCIsXG4gICAgY29ycmVjdEFuc3dlclR4dDogXCJCb25uZSByw6lwb25zZVwiLFxuICAgIGVzdGltYXRlZFRpbWU6IFwiRHVyw6llIGRlIGxlY3R1cmUgZXN0aW3DqWUgOiBcIixcbiAgICBlc3RpbWF0ZWRUaW1lT3B0aW9uIDpcbiAgICB7XG4gICAgICAgIHNob3J0OiBcImNvdXJ0ZVwiLFxuICAgICAgICBtZWRpdW06IFwibW95ZW5uZVwiLFxuICAgICAgICBsb25nOiBcImxvbmd1ZVwiXG4gICAgfSxcbiAgICBleHBsYW5hdGlvbkJlZm9yZVR4dDogXCJFeHRyYWl0IDpcIixcbiAgICBoYXZlQmVlblB1Ymxpc2hlZCA6IFwiOk5CIG5vdXZlYXV4IHF1ZXN0aW9ubmFpcmVzIG9udCDDqXTDqSBwdWJsacOpcy5cIixcbiAgICBoYXZlQmVlblJlZ2VuZXJhdGVkIDogXCJMZXMgcGFnZXMgSFRNTCBkZSAjTkIxIHF1ZXN0aW9ubmFpcmVzIG91IMOpbMOpbWVudHMgZGUgZ3JvdXBlcywgI05CMiBxdWl6cyBncm91cMOpcyBldCAjTkIzIHRow6htZXMgb250IMOpdMOpIHJlZ8OpbsOpcsOpcy5cIixcbiAgICBsYXN0VXBkYXRlZDogXCJEZXJuacOocmUgbWlzZSDDoCBqb3VyLCBsZSBcIixcbiAgICBsaW5rR29Ub05leHRFbGVtZW50OiBcIkFydGljbGUgc3VpdmFudFwiLFxuICAgIGxpbmtHb1RvUXVpejogXCJBY2PDqWRlciBhdSBxdWl6XCIsICAgIFxuICAgIG5lZWRDb3JyZWN0UHVibGlzaGluZ0RhdGU6IFwiTGEgZGF0ZSBkZSBwdWJsaWNhdGlvbiBmb3VybmllIG4nYSBwYXMgdW4gZm9ybWF0IHZhbGlkZS5cIixcbiAgICBuZWVkRXN0aW1hdGVkVGltZTogXCJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIHVuZSBlc3RpbWF0aW9uIGRlIGxhIGR1csOpZSBkZSBjZSBxdWl6LlwiLFxuICAgIG5lZWRHcm91cElmUmFuazogXCJWb3VzIGF2ZXogc2Fpc2kgdW4gcmFuZyBkZSBjbGFzc2VtZW50LCBzYW5zIHPDqWxlY3Rpb25uZXIgbGUgZ3JvdXBlIGR1IHF1aXouXCIsXG4gICAgbmVlZEludHJvZHVjdGlvbjogXCJNZXJjaSBkZSBmb3VybmlyIHVuIHRleHRlIGQnaW50cm9kdWN0aW9uIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZEtub3dJZklzUHVibGlzaGVkOiBcIklsIGZhdXQgc2F2b2lyIHNpIGNlIHF1aXogZXN0IHB1Ymxpw6kuXCIsXG4gICAgbmVlZExhbmd1YWdlOiBcIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBsYSBsYW5ndWUgZGUgY2UgcXVpei5cIixcbiAgICBuZWVkTm90VG9vTG9uZ1RpdGxlOiBcIkxlIHRpdHJlIGR1IHF1aXogbmUgZG9pdCBwYXMgY29tcHRlciBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTnVtYmVyRm9yUmFuazogXCJWb3VzIGRldmV6IHNhaXNpciB1biBub21icmUgZW50aWVyIHBvdXIgbGUgcmFuZyBkZSBjZSBxdWVzdGlvbm5haXJlIGRhbnMgc29uIGdyb3VwZS5cIiwgICAgICAgICAgICAgIFxuICAgIG5lZWRUaXRsZTogXCJNZXJjaSBkZSBmb3VybmlyIHVuIHRpdHJlIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZFVuaXF1ZVVybDogXCJMJ3VybCBkdSBxdWl6IGRvaXQgw6p0cmUgdW5pcXVlLlwiLFxuICAgIG5lZWRVcmw6IFwiTWVyY2kgZGUgZm91cm5pciBsJ3VybCDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5leHREYXRlV2l0aG91dFF1ZXN0aW9ubmFpcmU6IFwiUHJvY2hhaW5lIGRhdGUgc2FucyBxdWl6IHByb2dyYW1tw6kgOiBcIixcbiAgICBuZXh0UXVlc3Rpb25uYWlyZXNMaXN0OiBcIkxlcyAjTkIgcHJvY2hhaW5zIHF1aXpzIGRldmFudCDDqnRyZSBwdWJsacOpc1wiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTmFtZTogXCJxdWl6XCIsXG4gICAgcXVlc3Rpb25uYWlyZU5lZWRCZUNvbXBsZXRlZDogXCJRdWl6IGluY29tcGxldFwiLFxuICAgIHB1Ymxpc2hlZEF0OiBcIiwgbGVcIixcbiAgICBwdWJsaXNoZWRCeTogXCJRdWl6IHB1Ymxpw6kgcGFyXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZVJlc3VsdFRpdGxlIDogXCJSw6lzdWx0YXQgcG91ciB2b3RyZSByZWNoZXJjaGVcIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlV2l0aE5vUmVzdWx0IDogXCJBdWN1biBxdWl6IG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgdm90cmUgcmVjaGVyY2hlLlwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoUmVzdWx0IDogXCJJbCB5IGEgI05CIGFydGljbGUjUyBjb3JyZXNwb25kYW50IMOgIHZvdHJlIHJlY2hlcmNoZSA6XCIsXG4gICAgd3JvbmdBbnN3ZXJUeHQ6IFwiTWF1dmFpc2UgcsOpcG9uc2VcIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbGFzdFF1ZXN0aW9ubmFpcmVzRm9yVXNlcjogXCJWb3MgZGVybmnDqHJlcyBsZWN0dXJlcyA6XCIsXG4gICAgbm90Rm91bmQgOiBcIkxlcyBpbmZvcm1hdGlvbnMgZCd1biBxdWVzdGlvbm5haXJlIGF0dHJpYnXDqSDDoCB1biBhYm9ubsOpIG4nb250IHBhcyDDqXTDqSB0cm91dsOpZXMgOiBcIixcbiAgICBub1F1ZXN0aW9ubmFpcmVBY2Nlc3M6IFwiQXVjdW4gYXJ0aWNsZSBuZSB2b3VzIGEgZW5jb3JlIMOpdMOpIGVudm95w6kgcGFyIGUtbWFpbC4gU2FucyBkb3V0ZSwgdmVuZXotdm91cyBkZSBjcsOpZXIgdm90cmUgY29tcHRlLiBFbiBhdHRlbmRhbnQgZCdlbiByZWNldm9pciwgdm91cyBwb3V2ZXogbWlldXggZMOpY291dnJpciBsZSBzaXRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvYS1wcm9wb3MuaHRtbFxcXCI+ZW4gbGlzYW50IGxhIHBhZ2Ugw6AgcHJvcG9zPC9hPiBvdSBlbmNvcmUgY29tbWVuY2VyIMOgIHBhcmNvdXJpciBsaWJyZW1lbnQgc29uIGNvbnRlbnUgw6AgbCdhaWRlIGR1IG1vdGV1ciBkZSByZWNoZXJjaGUgY2ktZGVzc3VzLlwiLFxuICAgIHF1ZXN0aW9ubmFpcmVSZXRyeUluZm8gOiBcIlZvdXMgYXZleiBkw6lqw6AgcmXDp3UgdG91cyBsZXMgYXJ0aWNsZXMgZXQgcXVpenMgcHVibGnDqXMgw6AgY2Ugam91ci4gRW4gYXR0ZW5kYW50IGxhIHB1YmxpY2F0aW9uIGRlIG5vdXZlYXV4IGNvbnRlbnVzLCB2b3VzIHBvdXZleiBwZXV0LcOqdHJlIHLDqWVzc2F5ZXIgZGUgcsOpcG9uZHJlIGF1IHF1aXogc3VpdmFudCA/XCIsXG4gICAgcXVlc3Rpb25uYWlyZVJldHJ5SW5mb1R4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyBhdmV6IGTDqWrDoCByZcOndSB0b3VzIGxlcyBxdWl6cyBwdWJsacOpcyDDoCBjZSBqb3VyICEgRW4gYXR0ZW5kYW50IGxhIHB1YmxpY2F0aW9uIGRlIG5vdXZlYXV4IHF1aXpzLCB2b3VzIHBvdXZleiBwZXV0LcOqdHJlIHLDqWVzc2F5ZXIgbGUgc3VpdmFudCA/XFxuXFxuUVVFU1RJT05OQUlSRV9VUkxcXG5cXG5Cb25uZSBsZWN0dXJlICFcXG5cXG5TdG9wcGVyIGxlcyBlbnZvaXMgP1xcblVOU1VCU0NSSUJFX1VSTFwiLFxuICAgIHNlYXJjaElzTm90TG9uZ0Vub3VnaCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QtY2zDqXMgZCdhdSBtb2lucyBkZXV4IGNhcmFjdMOocmVzIHBvdXIgdm90cmUgcmVjaGVyY2hlLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqSBhdSBzaXRlICFcIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBiYWRQYXNzd29yZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbmUgY29ycmVzcG9uZCBhdXggaW5mb3JtYXRpb25zIHNhaXNpZXMuXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsIFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgZmFpbEJvdFRlc3Q6IFwiVW4gcHJvYmzDqG1lIGEgw6l0w6kgcmVuY29udHLDqSBkdXJhbnQgdm90cmUgaW5zY3JpcHRpb24uIEVuIGNhcyBkZSBkaWZmaWN1bHTDqSwgbidow6lzaXRleiBwYXMgY29udGFjdGVyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBmYWlsQm90VGVzdExvZzogXCJVbmUgaW5zY3JpcHRpb24gYSDDqXTDqSBibG9xdcOpZSwgcGFyY2UgcXVlIGxlIGNoYW1wIGVtYWlsMiDDqXRhaXQgcmVuc2VpZ27DqSBhdmVjIDogXCIsXG4gICAgZm9ybXNFbWFpbExhYmVsOiBcIkUtbWFpbCA6XCIsXG4gICAgZm9ybXNFbWFpbFBsYWNlaG9sZGVyOiBcIlZvdHJlIGFkcmVzc2UgZS1tYWlsXCIsXG4gICAgZm9ybXNFbWFpbDJQbGFjZWhvbGRlcjogXCJTaSB2b3VzIHZveWV6IGNlIGNoYW1wLCBsYWlzc2V6LWxlIHZpZGVcIiwvL2NoYW1wIHF1aSBuZSBkZXZyYWl0IHBhcyDDqnRyZSB2aXNpYmxlIHBhciBkZXMgaHVtYWluc1xuICAgIGZvcm1zQ0dVT2tMYWJlbDogXCJKJ2FjY2VwdGUgPGEgaHJlZj0jbGluayB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgcmVsPVxcXCJub29wZW5lclxcXCIgdGl0bGU9XFxcIsOAIGxpcmUgOilcXFwiPmxlcyBDb25kaXRpb25zIEfDqW7DqXJhbGUgZCdVdGlsaXNhdGlvbjwvYT4gZHUgc2l0ZSAocmVxdWlzKS5cIixcbiAgICBmb3Jtc1N1Ym1pdFR4dDogXCJKZSBtJ2Fib25uZSAhXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgXFxcInBhcnJhaW5cXFwiIGEgYmllbiDDqXTDqSB0cm91dsOpLiBDZXR0ZSBwZXJzb25uZSBzZXJhIGF2ZXJ0aWUgcXVlIHZvdXMgbCdhdmV6IGTDqXNpZ27DqWUuXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiRMOpc29sw6kgbWFpcyBhdWN1biB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNlIGNvZGUgLyBlLW1haWwgZGUgcGFycmFpbmFnZSA6KFwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVscyA6IFwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NVc2VyTmJHb2RDaGlsZHM6IFwiVm9pY2kgbGVzICNOQiB1dGlsaXNhdGV1cihzKSBpbnNjcml0KHMpIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIgOiBcIixcbiAgICBpbmZvc1VzZXJOb0dvZGNoaWxkczogXCJQb3VyIGwnaW5zdGFudCwgYXVjdW5lIHBlcnNvbm5lIG5lIHMnZXN0IGluc2NyaXRlLCBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiLlwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBhIGV4cGlyw6kuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCAqVElNSU5HKiAhXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjxicj5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLjwvcD48cD5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuU2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy5cXG5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlLW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+Ljxicj5FbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb25cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtUeHQgOiBcIlZhbGlkZXIgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0IEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkJ8OqdHJlIGVudm95w6kgw6Agdm90cmUgYWRyZXNzZSBlLW1haWwgKCNFTUFJTCkuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgITxicj48YnI+U2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIDxiPkVNQUlMPC9iPi48YnI+PGJyPkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIDxiPkVNQUlMPC9iPiDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyA8Yj5wb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT48L2I+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuPGJyPjxicj5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIGNpLWRlc3NvdXMuPGJyPjxicj7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuXFxuXFxuUG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBzdWl2YW50IDogTElOS19VUkxcXG5cXG7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgdW4gc2VydmV1ciBTTVRQIHZhbGlkZS5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiTWVyY2kgZCdhY2NlcHRlciBsZXMgQ0dVIHBvdXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGNvbXB0ZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSBwb3V2b2lyIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBub3V2ZWF1IGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgbGUgcHJlc3NlLXBhcGllciBkZSB2b3RyZSBvcmRpbmF0ZXVyIChvdSBtb2JpbGUpLiBWb3VzIHBvdXZleiBsZSBcXFwiY29sbGVyXFxcIiBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgc2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0OiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJEw6lzb2zDqSBtYWlzIGlsIHkgYSBldSB0cm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdGV6IG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLiBWb3VzIHBvdXZleiB2b3VzIHkgY29ubmVjdGVyIDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBjb21wbMOpdGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgdm90cmUgYWJvbm5lbWVudCBjaS1kZXNzb3VzLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIuKAplwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxuXG4gICAgLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4gICAgLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG4gICAgc3RhdGljIGdldFBhc3N3b3JkIChuYkNhck1pbiwgbmJDYXJNYXgpXG4gICAge1xuICAgICAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgICAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgICAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgICAgICB9XG4gICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICByZXR1cm4gcGFzc3dvcmQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBsaWVucyBkZSBsJ2ludGVyZmFjZVxuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9uc1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIsIHRpdGxlOlwiQWNjw6lkZXIgb3UgY3LDqWV6IHZvdHJlIGNvbXB0ZSBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiLCB0aXRsZTpcIkVuIHNhdm9pciArIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiLCB0aXRsZTpcIlBhZ2UgZCdhY2N1ZWlsXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkxlIGJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiwgdGl0bGU6XCJRdWkgYSBjcsOpw6kgV2lraUxlcm5pID8gUXVlbHMgc29udCB2b3MgZHJvaXRzID9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiLCB0aXRsZTpcIlZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZTogXCJhZG1pbi5odG1sXCIsXG4gICAgY2d1UGFnZTogXCJDR1YtQ0dVLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLCAgICBcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2VUeHQgOiBcIk1hIHBhZ2UgZCdhY2N1ZWlsLlwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgLyogVGV4dGVzIChnw6luw6lyYWwpICovXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbiAgICBsaWNlbmNlVHh0OiBcIkBjb3B5bGVmdCBMZSBjb250ZW51IGRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgP1xcXCI+ZXN0IGxpYnJlPC9hPiBldCB2b3VzIGVzdCBvZmZlcnQgc2FucyBwdWJsaWNpdMOpLiBWb3VzIHBvdXZleiA8YSBocmVmPVxcXCIvcGFydGljaXBlci1maW5hbmNlbWVudC5odG1sXFxcIiB0aXRsZT1cXFwiRmluYW5jZW1lbnQgcGFydGljaXBhdGlmIGF2ZWMgY29udHJlLXBhcnRpZXNcXFwiPnBhcnRpY2lwZXIgw6Agc29uIGZpbmFuY2VtZW50IGVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgLyogUGFnZSBkJ2FjY3VlaWwgKi9cbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiPGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+Ljxicj5Wb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzLCBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLjxicj5EZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgPGI+ZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgY3VsdHVyZSBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBqYXJkaW48L2I+LlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIjxiPlBhcyBkZSBmYWl0cyBhbHRlcm5hdGlmczwvYj4sIHRvdXMgbGVzIGNvbnRlbnVzIHNvbnQgPGI+c291cmPDqXMgcGFyIGRlcyBhcnRpY2xlcyBXaWtpcMOpZGlhPC9iPi48YnI+RXQgdG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwdWJsacOpIHN1ciBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzIHN1ciBjZSBzdWpldFxcXCI+c29udCBwYXJ0YWfDqXMgc291cyBsaWNlbmNlcyBsaWJyZXM8L2E+Ljxicj5MZSB0b3V0IHNhbnMgcHVibGljaXTDqSwgbmkgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzLjxicj48Yj5TdXIgV2lraUxlcm5pLCB2b3VzIGN1bHRpdmV6IHZvdHJlIGphcmRpbiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjwvYj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSA/XCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogIFwiVGVzdGV6IFdpa2lMZXJuaVwiLFxuICAgIGhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZTogIFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIC8qIFBhZ2UgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuLi4gKi8gICBcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIldpa2lMZXJuaSA6IHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiPHA+PGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgcXVlbHF1ZSBjaG9zZSBkZSBub3V2ZWF1PC9iPjxicj5TaSBkZXNzb3VzIGxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4gVm91cyBwb3V2ZXogYXVzc2kgPGEgaHJlZj0nL3F1aXpzL3RoZW1lcy5odG1sJz5wYXJjb3VyaXIgbGUgc2l0ZSBwYXIgdGjDqG1lcyBvdSBtb3RzLWNsw6lzPC9hPi48L3A+XCIsXG4gICAgLyogUGxhbiBkdSBzaXRlLCBsaXN0ZSBkZXMgdGFncyAqLyAgIFxuICAgIHRhZ0xpc3RUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBkZXMgYXJ0aWNsZXMgZXQgcXVpenMgc3VyIGRlIG5vbWJyZXV4IHRow6htZXMgIVwiLFxuICAgIHRhZ0xpc3RNZXRhRGVzYzogXCJXaWtpTGVybmkgOiBkw6ljb3V2cmlyIGxlcyBkaWZmw6lyZW50cyB0aMOobWVzIGFib3Jkw6lzIHBhciBXaWtpTGVybmkuIElueGV4IGR1IHNpdGUuXCIsXG4gICAgdGFnTGlzdEludHJvOiBcIjxoMz5BdmVjIFdpa2lMZXJuaSwgZGV2ZW5leiBmb3J0IGVuIHRow6htZXMuLi4gT3VpIG1haXMgcXVlbHMgdGjDqG1lcyA/IDopPC9oMz48YmxvY2txdW90ZT5BcmlzdG90ZeKArzogwqvigK9M4oCZaG9tbWUgYSBuYXR1cmVsbGVtZW50IGxhIHBhc3Npb24gZGUgY29ubmHDrnRyZeKApuKAr8K7PC9ibG9ja3F1b3RlPlwiLFxuICAgIC8qIFBhZ2UgcXVpenMgKi9cbiAgICBhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQ6IFwiUmVsaXJlXCIsXG4gICAgcXVpekVsZW1lbnRMaW5rc0ludHJvOiBcIkVuIHNhdm9pciBwbHVzXCIsXG4gICAgcXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZTogXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5p4oCvP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIjxwPkxlIHByaW5jaXBlIGVzdCBzaW1wbGXigK86IDxiPnZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpPC9iPi4gUHVpcyB2b3VzIDxiPmFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZTwvYj4uIFN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgPGI+dW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXM8L2I+IGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gQ+KAmWVzdCB0b3Vqb3VycyA8Yj5sZSBjb250ZW51IGRlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pPC9iPiBjb25jZXJuYW50IGxlcyDCq+KAr2Jvbm5lc+KAr8K7IHLDqXBvbnNlcy4gQ+KAmWVzdCB1bmUgZmHDp29uIGRlIHRlc3RlciDDoCBsYSBmb2lzIHZvdHJlIGNhcGFjaXTDqSBk4oCZYXR0ZW50aW9uIGV0IHZvdHJlIG3DqW1vaXJlLiBMZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG7igJlow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPC9wPjxwPjxiPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZOKAmWF1dHJlcyBzb2x1dGlvbnMgcG91ciBhbcOpbGlvcmVyIHZvdHJlIGN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4uIFBvdXIgZW4gc2F2b2lyIHBsdXMsIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBleHBsYW5hdGlvbkVsZW1lbnRUeHQ6IFwiPHA+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBkZSA8Yj5yZWNldm9pciBwYXIgZS1tYWlsIMOgIGxhIGZyw6lxdWVuY2UgY2hvaXNpZSwgZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXM8L2I+IGV0IHBvcnRhbnQgc3VyIGRlcyBzdWpldHMgdHLDqHMgdmFyacOpcyBkZSA8Yj5jdWx0dXJlIGfDqW7DqXJhbGU8L2I+IChhcnRzLCBoaXN0b2lyZSwgbGl0dMOpcmF0dXJlLCBzY2llbmNlcywgZXRjLikuPC9wPjxwPkNlcyBhcnRpY2xlcyBzb250IGJhc8OpcyBzdXIgPGI+dW5lIG91IHBsdXNpZXVycyBwYWdlcyBkZSBXaWtpcMOpZGlhPC9iPiAoZm91cm5pZXMgZW4gbGllbiksIGRvbnQgPGI+aWxzIGV4dHJhaWVudCBjZXJ0YWluZXMgaW5mb3JtYXRpb25zPC9iPi48L3A+PHA+Q2hhcXVlIHPDqXJpZSBk4oCZYXJ0aWNsZXMgZXN0IDxiPnN1aXZpZSBk4oCZdW4gcXVpejwvYj4gcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPC9wPjxwPjxiPlZvdXMgYXBwcmVuZXogYWluc2kgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+IHRyw6hzIHNpbXBsZW1lbnQuPC9wPlwiLFxuICAgIC8qIEF1dHJlcyAqL1xuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICB0d2l0dGVyQWNjb3VudDogXCJXaWtpTGVybmlcIixcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG59OyIsIi8vIC0tIFBBR0UgRCdBQ0NVRUlMIERFIEwnVVRJTElTQVRFVVJcblxuLy8vIFbDqXJpZmllciBxdWUgbCd1dGlsaXNhdGV1ciBlc3QgYmllbiBjb25uZWN0w6ksIGEgbGUgYm9uIHN0YXR1dCBldCBsZSByZWRpcmlnZXIgdmVycyBsZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24gc2kgY2Ugbidlc3QgcGFzIGxlIGNhcy5cbi8vLyBTaSBjJ2VzdCBvaywgb24gcsOpY3Vww6hyZSBzZXMgaW5mb3MgZXQgc3RhdHMgKyBsZXMgZGVybmllcnMgcXVpenMgYXV4cXVlbHMgaWwgYSBhY2PDqHMsIG1haXMgbidhIHBhcyByw6lwb25kdS5cbi8vLyBVbiBtb3RldXIgZGUgcmVjaGVyY2hlIHBlcm1ldCBkJ29idGVuaXIgZCdhdXRyZXMgcXVpenMgcGFybWkgY2V1eCBwdWJsacOpcy5cbi8vLyBQb3VyIGwnYWZmaWNoYWdlIGRlcyBsaXN0aW5ncyBkZSBxdWl6LCBsJ0FQSSByZXRvdXJuZSBkaXJlY3RlbWVudCBkdSBodG1sLlxuLy8vIFVuIG1lbnUgcGVybWV0IMOgIGwndXRpbGlzYXRldXIgZCdhY2PDqWRlciDDoCBsYSBtb2RpZmljYXRpb24gZGUgc2VzIGluZm9zLCBkZSBzb24gYWJvbm5lbWVudCwgZXRjLlxuLy8vIFVuIG1lc3NhZ2UgdmVuYW50IGQndW5lIGF1dHJlIHBhZ2UgcGV1dCBhdXNzaSDDqnRyZSDDoCBhZmZpY2hlciBsb3JzIGR1IHByZW1pZXIgY2hhcmdlbWVudC5cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5jb25zdCB7IGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUsIGdldFN0YXRzQW5zd2VycywgcXVlc3Rpb25uYWlyZVJvdXRlcywgc2VhcmNoUXVlc3Rpb25uYWlyZXMsIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgfSA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvcXVlc3Rpb25uYWlyZXNcIik7XG5jb25zdCB7IGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSwgdXNlclJvdXRlcyB9ID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTtcblxuLy8gRm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXREYXRhc0Zyb21JbnB1dHMsIHNldEF0dHJpYnV0ZXNUb0lucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5LCByZXBsYWNlQWxsIH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzdGF0c1VzZXIgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvYW5zd2VyXCIpO1xuY29uc3QgeyBuZXh0UGFnZSwgcHJldmlvdXNQYWdlLCBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBzZWFyY2hRdWVzdGlvbm5haXJlV2l0aFJlc3VsdCwgc2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhOb1Jlc3VsdCB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9xdWVzdGlvbm5haXJlXCIpO1xuY29uc3QgeyBsYXN0UXVlc3Rpb25uYWlyZXNGb3JVc2VyLCBub1F1ZXN0aW9ubmFpcmVBY2Nlc3MgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvcXVlc3Rpb25uYWlyZWFjY2Vzc1wiKTtcbmNvbnN0IHsgbmVlZEJlQ29ubmVjdGVkLCB3ZWxjb21lTWVzc2FnZSB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgZGl2TWFpbj0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZDcmFzaD0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmFzaFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBxdWl6SW50cm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1aXpzSW50cm9cIik7XG5jb25zdCBxdWl6TGlzdGluZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVpenNMaXN0XCIpO1xuY29uc3QgcXVpelBhZ2luYXRpb25QcmV2aW91cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHJldmlvdXNcIik7XG5jb25zdCBxdWl6UGFnaW5hdGlvbk5leHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5leHRcIik7XG5jb25zdCBmb3JtU2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hcIik7XG5jb25zdCBpbnB1dEJlZ2luID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWdpblwiKTtcbmNvbnN0IGJ0blJhbmRvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmFuZG9tXCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgbidlc3QgcGFzIGNvbm5lY3TDqSwgcGFzIGxhIHBlaW5lIGQnYWxsZXIgKyBsb2luIDpcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKFtcInVzZXJcIl0sIFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IG5lZWRCZUNvbm5lY3RlZCwgY29sb3I6XCJlcnJvclwiIH0sIHdpbmRvdy5sb2NhdGlvbik7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcImgxXCIsIHdlbGNvbWVNZXNzYWdlLnJlcGxhY2UoXCIjTkFNRVwiLCB1c2VyLm5hbWUpKTtcbiAgICAgICAgICAgIGRpdk1haW4uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJbml0aWFsaXNhdGlvbiBkdSBmb3JtdWxhaXJlIGRlIHJlY2hlcmNoZSA6XG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoeyBcInNlYXJjaFF1ZXN0aW9ubmFpcmVzXCI6IHNlYXJjaFF1ZXN0aW9ubmFpcmVzIH0sIGZvcm1TZWFyY2gpO1xuICAgICAgICAgICAgLy8gTGVzIHN0YXRzIDogICAgICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IHhoclN0YXRzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICB4aHJTdGF0cy5vcGVuKFwiR0VUXCIsIGFwaVVybCtxdWVzdGlvbm5haXJlUm91dGVzK2dldFN0YXRzQW5zd2Vycyt1c2VyLmlkKTtcbiAgICAgICAgICAgIHhoclN0YXRzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmICFpc0VtcHR5KHJlc3BvbnNlLm5iQW5zd2VycykgJiYgcmVzcG9uc2UubmJBbnN3ZXJzIT09MCkvLyBwYXMgZGUgc3RhdHMgc2kgYXVjdW5lIHLDqXBvbnNlICFcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR4dEludHJvPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CQU5TV0VSUyA6IHJlc3BvbnNlLm5iQW5zd2VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CUVVFU1RJT05OQUlSRVMgOiByZXNwb25zZS5uYlF1ZXN0aW9ubmFpcmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJUT1RRVUVTVElPTk5BSVJFUyA6IHJlc3BvbnNlLmdyb3Vwcy5uYlB1Ymxpc2hlZCtyZXNwb25zZS5xdWVzdGlvbm5haXJlcy5uYldpdGhvdXRHcm91cFB1Ymxpc2hlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWR0RVUkFUSU9OIDogcmVzcG9uc2UuYXZnRHVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBBVkdDT1JSRUNUQU5TV0VSUyA6IHJlc3BvbnNlLmF2Z0NvcnJlY3RBbnN3ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGEgc2l0dWF0aW9uIGVzdCBwbHVyaWVsbGUuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgIHR4dEludHJvPXJlcGxhY2VBbGwoc3RhdHNVc2VyLCBtYXBUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR4dEludHJvPShyZXNwb25zZS5uYkFuc3dlcnMgPiAxKSA/IHR4dEludHJvLnJlcGxhY2UoXCJTMVwiLCBcInNcIikgOiB0eHRJbnRyby5yZXBsYWNlKFwiUzFcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eHRJbnRybz0ocmVzcG9uc2UubmJRdWVzdGlvbm5haXJlcyA+IDEpID8gdHh0SW50cm8ucmVwbGFjZShcIlMyXCIsIFwic1wiKS5yZXBsYWNlKFwiUzNcIiwgXCJzXCIpIDogdHh0SW50cm8ucmVwbGFjZShcIlMyXCIsIFwiXCIpLnJlcGxhY2UoXCJTM1wiLCBcInNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eHRJbnRybz0obWFwVGV4dC5OQlRPVFFVRVNUSU9OTkFJUkVTID4gMSkgPyB0eHRJbnRyby5yZXBsYWNlKFwiUzRcIiwgXCJzXCIpIDogdHh0SW50cm8ucmVwbGFjZShcIlM0XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgdHh0SW50cm8sIFwiXCIsIFwiXCIsIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhoclN0YXRzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgIHhoclN0YXRzLnNlbmQoKTtcblxuICAgICAgICAgICAgLy8gUGFyIGTDqWZhdXQsIG9uIGFmZmljaGUgZGVzIGRlcm5pZXJzIMOpbMOpbWVudHMgc3VwcG9zw6lzIGx1cyBwYXIgbCd1dGlsaXNhdGV1ciA6XG4gICAgICAgICAgICBjb25zdCB4aHJMYXN0UXVpenMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhockxhc3RRdWl6cy5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2dldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZStcIlwiK3VzZXIuaWQrXCIvXCIrMCtcIi9cIitjb25maWdUZW1wbGF0ZS5uYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlK1wiL2h0bWxcIik7XG4gICAgICAgICAgICB4aHJMYXN0UXVpenMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLm5iVG90ID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQocXVpekludHJvLCBcInBcIiwgbm9RdWVzdGlvbm5haXJlQWNjZXNzLCBcIlwiLCBbXCJpbmZvXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYocmVzcG9uc2UuaHRtbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpJbnRybywgXCJwXCIsIGxhc3RRdWVzdGlvbm5haXJlc0ZvclVzZXIsIFwiXCIsIFtcImluZm9cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aXpMaXN0aW5nLmlubmVySFRNTD1yZXNwb25zZS5odG1sO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQocXVpenMsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pOy8vIHJldm9pciBzaSBpbnTDqXLDqnQgZCdhZmZpY2hlciBxdWVscXVlIGNob3NlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6cywgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7IC8vIGlkZW1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHJMYXN0UXVpenMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICB4aHJMYXN0UXVpenMuc2VuZCgpO1xuXG4gICAgICAgICAgICAvLyBUcmFpdGVtZW50IGR1IGxhbmNlbWVudCBkJ3VuZSByZWNoZXJjaGVcbiAgICAgICAgICAgIC8vIExhIHJlY2hlcmNoZSBwZXV0IMOqdHJlIGxhbmPDqWUgdmlhIGxhIGJvdXRvbiBzdWJtaXQgb3UgdW4gbGllbiBkZSBwYWdpbmF0aW9uXG4gICAgICAgICAgICBjb25zdCBzZW5kU2VhcmNoID0gKHR5cGU9XCJzZWFyY2hcIikgPT5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBxdWl6TGlzdGluZy5pbm5lckhUTUw9XCJcIitcIlwiO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybVNlYXJjaCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyU2VhcmNoID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYodHlwZT09XCJzZWFyY2hcIilcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtxdWVzdGlvbm5haXJlUm91dGVzK3NlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYodHlwZT09XCJyYW5kb21cIilcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtxdWVzdGlvbm5haXJlUm91dGVzK2dldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUpO1xuICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmICFpc0VtcHR5KHJlc3BvbnNlLm5iVG90KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5uYlRvdD09PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpJbnRybywgXCJwXCIsIHNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoTm9SZXN1bHQsIFwiXCIsIFtcImluZm9cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaD1cIlwiOy8vIHNpbm9uIGxlcyBoYXNoIHMnZW5jaGHDrm5lbnQuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNxdWl6c0ludHJvXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHJlc3BvbnNlLmh0bWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHh0SW50cm89c2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhSZXN1bHQucmVwbGFjZShcIiNOQlwiLCByZXNwb25zZS5uYlRvdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dEludHJvPShyZXNwb25zZS5uYlRvdCA+IDEpID8gdHh0SW50cm8ucmVwbGFjZShcIiNTXCIsXCJzXCIpIDogdHh0SW50cm8ucmVwbGFjZShcIiNTXCIsXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQocXVpekludHJvLCBcInBcIiwgdHh0SW50cm8gLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpekxpc3RpbmcuaW5uZXJIVE1MPXJlc3BvbnNlLmh0bWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVpenNJbnRyb1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFnaW5hdGlvbiBuw6ljZXNzYWlyZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9uIGNvbW1lbmNlIHBhciB2aWRlci4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWl6UGFnaW5hdGlvblByZXZpb3VzLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWl6UGFnaW5hdGlvbk5leHQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmJlZ2luICE9IDApLy8gcGV1dCByZXRvdXJuZXIgXCIwXCIgZXQgbm9uIDAgIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpQYWdpbmF0aW9uUHJldmlvdXMsIFwiYVwiLCBcIjw8IFwiK3ByZXZpb3VzUGFnZSAsIFwicHJldmlvdXNSZXNcIiwgW1wiYnV0dG9uXCJdLCB7IGhyZWY6IFwiI3NlYXJjaFwiIH0pOyAvLyByZXZvaXIsIGxlcyBcIjw8XCIgcG91cnJhaWVudCDDqnRyZSBnw6lyw6llcyBwYXIgbGUgQ1NTXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1BhZ2VFbHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcmV2aW91c1Jlc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlIHJldG91ciDDoCBsYSBwYWdlIHByw6ljw6lkZW50ZSBwZXV0IHNlIGZhaXJlIGVuIGNsaXF1YW50IHN1ciBsZSBib3V0b24gb3UgdmlhIGwnaGlzdG9yaXF1ZSBkdSBuYXZpZ2F0ZXVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnb0JhY2tSZXMgPSAoKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdCZWdpbj1yZXNwb25zZS5iZWdpbi1jb25maWdUZW1wbGF0ZS5uYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5ld0JlZ2luPDApIC8vIG5lIGRldnJhaXQgcGFzIMOqdHJlIHBvc3NpYmxlLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QmVnaW49MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZ2luXCIpLnZhbHVlPW5ld0JlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTZWFyY2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVpenNJbnRyb1wiKTsvLyBwb3VyIHJlbW9udGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2VFbHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvQmFja1JlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW1ibGUgcHJvdm9xdcOpIGJ1ZyA/Pz9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vbnBvcHN0YXRlID0gZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29CYWNrUmVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuZW5kIDwgKHJlc3BvbnNlLm5iVG90LTEpKS8vIC0xLCBjYXIgdGFibGVhdSBjb21tZW5jZSDDoCAwICFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6UGFnaW5hdGlvbk5leHQsIFwiYVwiLCBuZXh0UGFnZSsgXCIgPj5cIiwgXCJuZXh0UmVzXCIsIFtcImJ1dHRvblwiXSwgeyBocmVmOiBcIiNzZWFyY2hcIiB9LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0UGFnZUVsdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5leHRSZXNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UGFnZUVsdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWdpblwiKS52YWx1ZT1yZXNwb25zZS5lbmQrMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kU2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjsvLyBzaW5vbiBsZXMgaGFzaCBzJ2VuY2hhw65uZW50Li4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNxdWl6c0ludHJvXCIpOyAvLyBwb3VyIHJlbW9udGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQocXVpenMsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQocXVpenMsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXRhcy5vdXRwdXQ9XCJodG1sXCI7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBidG5SYW5kb20uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmVnaW5cIikudmFsdWU9MDtcbiAgICAgICAgICAgICAgICBzZW5kU2VhcmNoKFwicmFuZG9tXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvcm1TZWFyY2guYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZ2luXCIpLnZhbHVlPTA7XG4gICAgICAgICAgICAgICAgc2VuZFNlYXJjaCgpO1xuICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICBhZGRFbGVtZW50KGRpdkNyYXNoLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6IG91IGQndW4gZ3JvdXBlIGRlIHF1aXpzXG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICghaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSB8fCAhaXNFbXB0eShhbnN3ZXIuR3JvdXBJZCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkpXG4gICAgICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGF0YXMuR3JvdXBJZD1hbnN3ZXIuR3JvdXBJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/index.app.js b/front/public/JS/index.app.js index 9a76b76..6e4f6ef 100644 --- a/front/public/JS/index.app.js +++ b/front/public/JS/index.app.js @@ -758,16 +758,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/everywhere.js */ "./src/tools/everywhere.js"); /* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/matomo.js */ "./src/tools/matomo.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- SCRIPT DE BASE APPELÉ DANS LES PAGES TYPE ACCUEIL DU SITE // Fichier de configuration tirés du backend : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); @@ -775,46 +771,19 @@ var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["helloDev"])(); // Test de connexion de l'utilisateur pour adapter le lien du menu... -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["checkSession"])(); +const initialise = async () => { + try { + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["checkSession"])(); - case 3: - isConnected = _context.sent; - - if (isConnected) { - // on change le lien d'accès au compte - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["updateAccountLink"])(user.status, configTemplate); - } else Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_3__["loadMatomo"])(); - - _context.next = 10; - break; - - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - console.error(_context.t0); - - case 10: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 7]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + if (isConnected) { + // on change le lien d'accès au compte + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["updateAccountLink"])(user.status, configTemplate); + } else Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_3__["loadMatomo"])(); + } catch (e) { + console.error(e); + } +}; initialise(); @@ -834,14 +803,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -859,13 +827,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -885,7 +853,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__); // Fonction chargeant le code matomo -var loadMatomo = function loadMatomo() { +const loadMatomo = () => { // chargement de matomo var _paq = window._paq = window._paq || []; //ajout cnil : @@ -951,27 +919,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -980,11 +944,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -998,96 +962,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1096,4 +1032,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJjb25maWdUZW1wbGF0ZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImNoZWNrU2Vzc2lvbiIsImlzQ29ubmVjdGVkIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwibG9hZE1hdG9tbyIsImNvbnNvbGUiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJqc29uIiwicGFyc2UiLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImxvZyIsImxpbmsiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiaG9tZVBhZ2UiLCJfcGFxIiwid2luZG93IiwicHVzaCIsInNlbGYiLCJnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0Iiwibm93Iiwibm93VHMiLCJyb3VuZCIsImdldFRpbWUiLCJ2aXNpdG9ySW5mbyIsImdldFZpc2l0b3JJbmZvIiwiY3JlYXRlVHMiLCJwYXJzZUludCIsImNvb2tpZVRpbWVvdXQiLCJvcmlnaW5hbFRpbWVvdXQiLCJzZXRWaXNpdG9yQ29va2llVGltZW91dCIsInUiLCJkIiwiZyIsImNyZWF0ZUVsZW1lbnQiLCJzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0eXBlIiwiYXN5bmMiLCJzcmMiLCJwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJ0b2tlbiIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJuYlF1ZXN0aW9ucyIsIlF1ZXN0aW9ubmFpcmVJZCIsIkdyb3VwSWQiLCJ1cmxSZWRpcmVjdGlvbiIsIm1lc3NhZ2UiLCJ1cmxXYW50ZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ubG9hZCIsInJlc3BvbnNlIiwicmVzcG9uc2VUZXh0IiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJsb2NhdGlvbiIsImluZGV4T2YiLCJhc3NpZ24iLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsInNlbmQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLG1DQUFELENBQXJCOztBQUNBLElBQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQyxxREFBRCxDQUE5Qjs7QUFFQUUsTUFBTSxDQUFDQyxPQUFQO0FB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RUFBMEJDLFNBQTFCLENBQVo7QUFDQUUsNkJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLG1CQTVDRDs7QUE2Q0FJLHFCQUFHLENBQUNjLE9BQUosR0FBYztBQUFBLDJCQUFNakIsTUFBTSxDQUFDRyxHQUFHLENBQUNlLFVBQUwsQ0FBWjtBQUFBLG1CQUFkOztBQUNBZixxQkFBRyxDQUFDZ0IsSUFBSjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFaN0YsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU00RSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDUCxjQUFELEVBQWlCQyxPQUFqQixFQUEwQkMsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUNoSywyREFBTyxDQUFDK0osT0FBRCxDQUFYLEVBQ0k3RCxvRUFBVSxDQUFDLFNBQUQsRUFBWTZELE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQy9KLDJEQUFPLENBQUNnSyxTQUFELENBQVgsRUFDSTlELG9FQUFVLENBQUMsS0FBRCxFQUFROEQsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDaEssMkRBQU8sQ0FBQzhKLGNBQUQsQ0FBWCxFQUNJM0MsTUFBTSxDQUFDOEQsUUFBUCxDQUFnQkUsTUFBaEIsQ0FBdUJyQixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2luZGV4LmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIi8vIFNpIG5vbiB1dGlsaXPDqSwgc3VwcHJpbWVyIGwnYXBwZWwgZGVzIEpTIGZyb250LWVuZCBwdWlzIHJlY29tcGlsZXIuXG4vLyBSZXZvaXIgY29tbWVudCByw6lvcmdhbmlzZXIgY2VsYSBzb3VzLWZvcm1lIGRlIG1vZHVsZSBpbmTDqXBlbmRhbnQuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gU3RhdHMgTWF0b21vIDpcbiAgICBtYXRvbW86IHsgdXJsOiBcImh0dHBzOi8vc3RhdHMubGUtZmFiLWxhYi5jb20vXCIsIHNpdGVJZDogXCI1XCIgfSxcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gU0NSSVBUIERFIEJBU0UgQVBQRUzDiSBEQU5TIExFUyBQQUdFUyBUWVBFIEFDQ1VFSUwgRFUgU0lURVxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7IGdldExvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGxvYWRNYXRvbW8gfSBmcm9tIFwiLi90b29scy9tYXRvbW8uanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbmhlbGxvRGV2KCk7XG5cbi8vIFRlc3QgZGUgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgcG91ciBhZGFwdGVyIGxlIGxpZW4gZHUgbWVudS4uLlxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG9uIGNoYW5nZSBsZSBsaWVuIGQnYWNjw6hzIGF1IGNvbXB0ZVxuICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBsb2FkTWF0b21vKCk7XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJjb25maWdUZW1wbGF0ZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImlzQ29ubmVjdGVkIiwiY2hlY2tTZXNzaW9uIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwibG9hZE1hdG9tbyIsImUiLCJjb25zb2xlIiwiZXJyb3IiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwianNvbiIsInBhcnNlIiwiZ2V0SXRlbSIsInJlbW92ZUxvY2FseSIsInJlbW92ZUl0ZW0iLCJsb2ciLCJsaW5rIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImhvbWVQYWdlIiwiX3BhcSIsIndpbmRvdyIsInB1c2giLCJzZWxmIiwiZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCIsIm5vdyIsIm5vd1RzIiwicm91bmQiLCJnZXRUaW1lIiwidmlzaXRvckluZm8iLCJnZXRWaXNpdG9ySW5mbyIsImNyZWF0ZVRzIiwicGFyc2VJbnQiLCJjb29raWVUaW1lb3V0Iiwib3JpZ2luYWxUaW1lb3V0Iiwic2V0VmlzaXRvckNvb2tpZVRpbWVvdXQiLCJ1IiwiZCIsImciLCJjcmVhdGVFbGVtZW50IiwicyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidHlwZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwidG9rZW4iLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJkYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwibmJRdWVzdGlvbnMiLCJRdWVzdGlvbm5haXJlSWQiLCJHcm91cElkIiwidXJsUmVkaXJlY3Rpb24iLCJtZXNzYWdlIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbmxvYWQiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwibG9jYXRpb24iLCJpbmRleE9mIiwiYXNzaWduIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJzZW5kIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyxtQ0FBRCxDQUFyQjs7QUFDQSxJQUFNQyxjQUFjLEdBQUdELG1CQUFPLENBQUMscURBQUQsQ0FBOUI7O0FBRUFFLE1BQU0sQ0FBQ0MsT0FB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LENBQTFCOztBQUNBZixXQUFHLENBQUNnQixJQUFKO0FBQ0g7QUFDSjtBQUNKLEdBdEVNLENBQVA7QUF1RUgsQ0F6RU0sQyxDQTBFUDs7QUFDQSxNQUFNakIsWUFBWSxHQUFHLENBQUNQLGNBQUQsRUFBaUJDLE9BQWpCLEVBQTBCQyxTQUExQixLQUNyQjtBQUNJLE1BQUcsQ0FBQ2pLLDJEQUFPLENBQUNnSyxPQUFELENBQVgsRUFDSTdELG9FQUFVLENBQUMsU0FBRCxFQUFZNkQsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDaEssMkRBQU8sQ0FBQ2lLLFNBQUQsQ0FBWCxFQUNJOUQsb0VBQVUsQ0FBQyxLQUFELEVBQVE4RCxTQUFSLENBQVY7QUFDSixNQUFHLENBQUNqSywyREFBTyxDQUFDK0osY0FBRCxDQUFYLEVBQ0kzQyxNQUFNLENBQUM4RCxRQUFQLENBQWdCRSxNQUFoQixDQUF1QnJCLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvaW5kZXguYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwiLy8gU2kgbm9uIHV0aWxpc8OpLCBzdXBwcmltZXIgbCdhcHBlbCBkZXMgSlMgZnJvbnQtZW5kIHB1aXMgcmVjb21waWxlci5cbi8vIFJldm9pciBjb21tZW50IHLDqW9yZ2FuaXNlciBjZWxhIHNvdXMtZm9ybWUgZGUgbW9kdWxlIGluZMOpcGVuZGFudC5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBTdGF0cyBNYXRvbW8gOlxuICAgIG1hdG9tbzogeyB1cmw6IFwiaHR0cHM6Ly9zdGF0cy5sZS1mYWItbGFiLmNvbS9cIiwgc2l0ZUlkOiBcIjVcIiB9LFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBTQ1JJUFQgREUgQkFTRSBBUFBFTMOJIERBTlMgTEVTIFBBR0VTIFRZUEUgQUNDVUVJTCBEVSBTSVRFXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiB0aXLDqXMgZHUgYmFja2VuZCA6XG5pbXBvcnQgeyBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgbG9hZE1hdG9tbyB9IGZyb20gXCIuL3Rvb2xzL21hdG9tby5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuaGVsbG9EZXYoKTtcblxuLy8gVGVzdCBkZSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBwb3VyIGFkYXB0ZXIgbGUgbGllbiBkdSBtZW51Li4uXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbigpO1xuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb24gY2hhbmdlIGxlIGxpZW4gZCdhY2PDqHMgYXUgY29tcHRlXG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxvYWRNYXRvbW8oKTtcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBtYXRvbW8gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL21hdG9tby5qc1wiO1xuXG4vLyBGb25jdGlvbiBjaGFyZ2VhbnQgbGUgY29kZSBtYXRvbW9cbmV4cG9ydCBjb25zdCBsb2FkTWF0b21vID0gKCkgPT5cbntcbiAgICAvLyBjaGFyZ2VtZW50IGRlIG1hdG9tb1xuICAgIHZhciBfcGFxID0gd2luZG93Ll9wYXEgPSB3aW5kb3cuX3BhcSB8fCBbXTtcbiAgICAvL2Fqb3V0IGNuaWwgIDpcbiAgICBfcGFxLnB1c2goW2Z1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgZnVuY3Rpb24gZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgbm93VHMgPSBNYXRoLnJvdW5kKG5vdy5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICAgICAgICAgIHZpc2l0b3JJbmZvID0gc2VsZi5nZXRWaXNpdG9ySW5mbygpO1xuICAgICAgICAgICAgdmFyIGNyZWF0ZVRzID0gcGFyc2VJbnQodmlzaXRvckluZm9bMl0pO1xuICAgICAgICAgICAgdmFyIGNvb2tpZVRpbWVvdXQgPSAzMzY5NjAwMDsgLy8gMTMgbW9pcyBlbiBzZWNvbmRlc1xuICAgICAgICAgICAgdmFyIG9yaWdpbmFsVGltZW91dCA9IGNyZWF0ZVRzICsgY29va2llVGltZW91dCAtIG5vd1RzO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZpc2l0b3JDb29raWVUaW1lb3V0KCBnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0KCkgKTtcbiAgICB9XSk7XG4gICAgLy8tLWZpbiBham91dCBjbmlsXG4gICAgX3BhcS5wdXNoKFsndHJhY2tQYWdlVmlldyddKTtcbiAgICBfcGFxLnB1c2goWydlbmFibGVMaW5rVHJhY2tpbmcnXSk7XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdT1tYXRvbW8udXJsO1xuICAgICAgICBfcGFxLnB1c2goWydzZXRUcmFja2VyVXJsJywgdSsnbWF0b21vLnBocCddKTtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0U2l0ZUlkJywgbWF0b21vLnNpdGVJZF0pO1xuICAgICAgICB2YXIgZD1kb2N1bWVudCwgZz1kLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLCBzPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdO1xuICAgICAgICBnLnR5cGU9J3RleHQvamF2YXNjcmlwdCc7IGcuYXN5bmM9dHJ1ZTsgZy5zcmM9dSsnbWF0b21vLmpzJzsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpO1xuICAgIH0pKCk7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6IG91IGQndW4gZ3JvdXBlIGRlIHF1aXpzXG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICghaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSB8fCAhaXNFbXB0eShhbnN3ZXIuR3JvdXBJZCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkpXG4gICAgICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGF0YXMuR3JvdXBJZD1hbnN3ZXIuR3JvdXBJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/loginLink.app.js b/front/public/JS/loginLink.app.js index 88be77c..57b2396 100644 --- a/front/public/JS/loginLink.app.js +++ b/front/public/JS/loginLink.app.js @@ -956,10 +956,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- PAGE PERMETTANT DE TESTER UN LIEN DE CONNEXION REÇU PAR E-MAIL /// Un token est transmis en paramètre de l'Url. Il a une validité limité dans le temps. /// Dans ce cas, on peut rediriger l'utilisateur vers la page de connexion pour obtenir un nouveau lien de validation @@ -968,15 +964,17 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Si l'utilisateur a déjà une session active valide, c'est qu'il a déjà cliqué sur le lien. On le redirige également vers sa page d'accueil. // Fichier de configuration côté client : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var _require = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"), - connectionPage = _require.connectionPage, - userHomePage = _require.userHomePage; +const { + connectionPage, + userHomePage +} = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.js"), - connectionWithLinkRoute = _require2.connectionWithLinkRoute, - userRoutes = _require2.userRoutes; // Importation des fonctions utile au script : +const { + connectionWithLinkRoute, + userRoutes +} = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // Importation des fonctions utile au script : @@ -986,94 +984,70 @@ var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.j // Dictionnaires : -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require3.serverError; +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require4 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - alreadyConnected = _require4.alreadyConnected, - badLinkValidationMessage = _require4.badLinkValidationMessage, - validationMessage = _require4.validationMessage; +const { + alreadyConnected, + badLinkValidationMessage, + validationMessage +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); -var divResponse = document.getElementById("response"); +const divResponse = document.getElementById("response"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, datas, xhr; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(); +const initialise = async () => { + try { + // si l'utilisateur est déjà connecté, pas la peine d'aller + loin : + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(); - case 3: - isConnected = _context.sent; + if (isConnected) { + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["saveLocaly"])("message", { + message: alreadyConnected, + color: "info" + }); // pour l'afficher sur la page suivante - if (isConnected) { - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["saveLocaly"])("message", { - message: alreadyConnected, - color: "info" - }); // pour l'afficher sur la page suivante + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + window.location.assign("/" + userHomePage); // type de connexion possible que pour les simples users + } else { + let datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_5__["getUrlParams"])(); - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - window.location.assign("/" + userHomePage); // type de connexion possible que pour les simples users - } else { - datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_5__["getUrlParams"])(); + if (datas && datas.t !== undefined) { + const xhr = new XMLHttpRequest(); + xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + connectionWithLinkRoute); - if (datas && datas.t !== undefined) { - xhr = new XMLHttpRequest(); - xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + connectionWithLinkRoute); + xhr.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - xhr.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + if (this.status === 200 && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_4__["isEmpty"])(response.userId) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_4__["isEmpty"])(response.connexionTime) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_4__["isEmpty"])(response.token)) { + let connexionMaxTime = Date.now(); + if (response.connexionTime.endsWith("days")) connexionMaxTime += parseInt(response.connexionTime, 10) * 24 * 3600 * 1000;else connexionMaxTime += parseInt(response.connexionTime, 10) * 3600 * 1000; + Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["setSession"])(response.userId, response.token, connexionMaxTime); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("lastAnswer"); // ! important pour ne pas enregister plusieurs fois le résultat - if (this.status === 200 && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_4__["isEmpty"])(response.userId) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_4__["isEmpty"])(response.connexionTime) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_4__["isEmpty"])(response.token)) { - var connexionMaxTime = Date.now(); - if (response.connexionTime.endsWith("days")) connexionMaxTime += parseInt(response.connexionTime, 10) * 24 * 3600 * 1000;else connexionMaxTime += parseInt(response.connexionTime, 10) * 3600 * 1000; - Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["setSession"])(response.userId, response.token, connexionMaxTime); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("lastAnswer"); // ! important pour ne pas enregister plusieurs fois le résultat + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", validationMessage, "", ["success"]); // au cas où blocage redirection - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", validationMessage, "", ["success"]); // au cas où blocage redirection + window.location.assign("/" + userHomePage); // connexion par lien ne concerne que les simples "user" + } else if ((this.status === 401 || this.status === 403) && response.errors != undefined) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", badLinkValidationMessage.replace("#URL", connectionPage), "", ["error"]); + } + }; - window.location.assign("/" + userHomePage); // connexion par lien ne concerne que les simples "user" - } else if ((this.status === 401 || this.status === 403) && response.errors != undefined) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", badLinkValidationMessage.replace("#URL", connectionPage), "", ["error"]); - } - }; + datas.timeDifference = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["getTimeDifference"])(); // si l'utilisateur a précédement répondu à un quiz, j'ajoute les infos de son résultat : - datas.timeDifference = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["getTimeDifference"])(); // si l'utilisateur a précédement répondu à un quiz, j'ajoute les infos de son résultat : - - datas = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkAnswerDatas"])(datas); - xhr.setRequestHeader("Content-Type", "application/json"); - xhr.send(JSON.stringify(datas)); - } - } - - _context.next = 10; - break; - - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - - case 10: - case "end": - return _context.stop(); - } + datas = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkAnswerDatas"])(datas); + xhr.setRequestHeader("Content-Type", "application/json"); + xhr.send(JSON.stringify(datas)); } - }, _callee, null, [[0, 7]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + } +}; initialise(); @@ -1093,14 +1067,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1118,32 +1091,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1167,13 +1129,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1193,14 +1155,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); // Fonction récupérant les paramètres passés par l'url -var getUrlParams = function getUrlParams() { +const getUrlParams = () => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); + const parameters = location.search.substring(1).split("&"); if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, + let param, datas = {}; - for (var i in parameters) { + for (let i in parameters) { param = parameters[i].split("="); if (param.length === 2) datas[param[0]] = decodeURI(param[1]); } @@ -1230,27 +1192,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1259,11 +1217,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1277,96 +1235,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1375,4 +1305,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9sb2dpbkxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExhbmd1YWdlIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJkaXZSZXNwb25zZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJjaGVja1Nlc3Npb24iLCJpc0Nvbm5lY3RlZCIsInNhdmVMb2NhbHkiLCJtZXNzYWdlIiwiY29sb3IiLCJ1c2VyIiwiZ2V0TG9jYWx5Iiwid2luZG93IiwibG9jYXRpb24iLCJhc3NpZ24iLCJkYXRhcyIsImdldFVybFBhcmFtcyIsInQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwidXNlcklkIiwiY29ubmV4aW9uVGltZSIsInRva2VuIiwiY29ubmV4aW9uTWF4VGltZSIsIm5vdyIsImVuZHNXaXRoIiwicGFyc2VJbnQiLCJzZXRTZXNzaW9uIiwicmVtb3ZlTG9jYWx5IiwiYWRkRWxlbWVudCIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJjaGVja0Fuc3dlckRhdGFzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJzdHJpbmdpZnkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImlubmVySFRNTCIsImFwcGVuZENoaWxkIiwiY29uc29sZSIsImxvZyIsInVwZGF0ZUFjY291bnRMaW5rIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiaG9tZVBhZ2UiLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIiwib25lcnJvciIsInN0YXR1c1RleHQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLG1DQUFELENBQXJCOztBQUNBLElBQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQyxxREFBRCxD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T0FBakIsRUFBMEJrRixTQUExQixDQUFaO0FBQ0FFLDZCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBMUUscUJBQUcsQ0FBQ29GLE9BQUosR0FBYztBQUFBLDJCQUFNVCxNQUFNLENBQUMzRSxHQUFHLENBQUNxRixVQUFMLENBQVo7QUFBQSxtQkFBZDs7QUFDQXJGLHFCQUFHLENBQUM0QixJQUFKO0FBQ0g7QUFDSjtBQUNKLGFBdEVNLENBRmlCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVp6QyxZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTTBGLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNOLGNBQUQsRUFBaUJqRixPQUFqQixFQUEwQmtGLFNBQTFCLEVBQ3JCO0FBQ0ksTUFBRyxDQUFDaEwsMkRBQU8sQ0FBQzhGLE9BQUQsQ0FBWCxFQUNJRCxvRUFBVSxDQUFDLFNBQUQsRUFBWUMsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDOUYsMkRBQU8sQ0FBQ2dMLFNBQUQsQ0FBWCxFQUNJbkYsb0VBQVUsQ0FBQyxLQUFELEVBQVFtRixTQUFSLENBQVY7QUFDSixNQUFHLENBQUNoTCwyREFBTyxDQUFDK0ssY0FBRCxDQUFYLEVBQ0k3RSxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCMkUsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9sb2dpbkxpbmsuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbG9naW5MaW5rLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBQQUdFIFBFUk1FVFRBTlQgREUgVEVTVEVSIFVOIExJRU4gREUgQ09OTkVYSU9OIFJFw4dVIFBBUiBFLU1BSUxcblxuLy8vIFVuIHRva2VuIGVzdCB0cmFuc21pcyBlbiBwYXJhbcOodHJlIGRlIGwnVXJsLiBJbCBhIHVuZSB2YWxpZGl0w6kgbGltaXTDqSBkYW5zIGxlIHRlbXBzLlxuLy8vIERhbnMgY2UgY2FzLCBvbiBwZXV0IHJlZGlyaWdlciBsJ3V0aWxpc2F0ZXVyIHZlcnMgbGEgcGFnZSBkZSBjb25uZXhpb24gcG91ciBvYnRlbmlyIHVuIG5vdXZlYXUgbGllbiBkZSB2YWxpZGF0aW9uXG4vLy8gU2kgbGUgdG9rZW4gZXN0IG9rLCBvbiBjcsOpZSB1bmUgc2Vzc2lvbiBzdWl2YW50IGxhIGR1csOpZSByZXRvdXJuw6llIHBhciBsJ0FQSSBldCByZWRpcmlnZSBsJ3V0aWxpc2F0ZXVyIHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWxcbi8vLyBVbiByw6lzdWx0YXQgZGUgcXVpeiBwZXV0IGF1c3NpIGF2b2lyIMOpdMOpIGVucmVnaXN0csOpIGPDtHTDqSBjbGllbnQgZXQgZXN0IGFsb3JzIMOgIHRyYW5zbWV0dHJlIMOgIGwnQVBJLlxuLy8vIFNpIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgdW5lIHNlc3Npb24gYWN0aXZlIHZhbGlkZSwgYydlc3QgcXUnaWwgYSBkw6lqw6AgY2xpcXXDqSBzdXIgbGUgbGllbi4gT24gbGUgcmVkaXJpZ2Ugw6lnYWxlbWVudCB2ZXJzIHNhIHBhZ2UgZCdhY2N1ZWlsLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCB7IGNvbm5lY3Rpb25QYWdlLCB1c2VySG9tZVBhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmNvbnN0IHsgY29ubmVjdGlvbldpdGhMaW5rUm91dGUsIHVzZXJSb3V0ZXMgfSA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvdXNlcnNcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tBbnN3ZXJEYXRhcywgY2hlY2tTZXNzaW9uLCBnZXRUaW1lRGlmZmVyZW5jZSwgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBhbHJlYWR5Q29ubmVjdGVkLCBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UsIHZhbGlkYXRpb25NZXNzYWdlIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5cbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICAvLyBzaSBsJ3V0aWxpc2F0ZXVyIGVzdCBkw6lqw6AgY29ubmVjdMOpLCBwYXMgbGEgcGVpbmUgZCdhbGxlciArIGxvaW4gOlxuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogYWxyZWFkeUNvbm5lY3RlZCwgY29sb3I6XCJpbmZvXCIgfSk7Ly8gcG91ciBsJ2FmZmljaGVyIHN1ciBsYSBwYWdlIHN1aXZhbnRlXG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK3VzZXJIb21lUGFnZSk7Ly8gdHlwZSBkZSBjb25uZXhpb24gcG9zc2libGUgcXVlIHBvdXIgbGVzIHNpbXBsZXMgdXNlcnNcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBkYXRhcz1nZXRVcmxQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCt1c2VyUm91dGVzK2Nvbm5lY3Rpb25XaXRoTGlua1JvdXRlKTtcbiAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiAhaXNFbXB0eShyZXNwb25zZS51c2VySWQpICYmICFpc0VtcHR5KHJlc3BvbnNlLmNvbm5leGlvblRpbWUpICYmICFpc0VtcHR5KHJlc3BvbnNlLnRva2VuKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uTWF4VGltZT1EYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmNvbm5leGlvblRpbWUuZW5kc1dpdGgoXCJkYXlzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZXhpb25NYXhUaW1lKz1wYXJzZUludChyZXNwb25zZS5jb25uZXhpb25UaW1lLDEwKSoyNCozNjAwKjEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZXhpb25NYXhUaW1lKz1wYXJzZUludChyZXNwb25zZS5jb25uZXhpb25UaW1lLDEwKSozNjAwKjEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2Vzc2lvbihyZXNwb25zZS51c2VySWQsIHJlc3BvbnNlLnRva2VuLCBjb25uZXhpb25NYXhUaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJsYXN0QW5zd2VyXCIpOy8vICEgaW1wb3J0YW50IHBvdXIgbmUgcGFzIGVucmVnaXN0ZXIgcGx1c2lldXJzIGZvaXMgbGUgcsOpc3VsdGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB2YWxpZGF0aW9uTWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7Ly8gYXUgY2FzIG/DuSBibG9jYWdlIHJlZGlyZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIit1c2VySG9tZVBhZ2UpOy8vIGNvbm5leGlvbiBwYXIgbGllbiBuZSBjb25jZXJuZSBxdWUgbGVzIHNpbXBsZXMgXCJ1c2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh0aGlzLnN0YXR1cyA9PT0gNDAxIHx8IHRoaXMuc3RhdHVzID09PSA0MDMpICYmIHJlc3BvbnNlLmVycm9ycyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UucmVwbGFjZShcIiNVUkxcIiwgY29ubmVjdGlvblBhZ2UpLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YXMudGltZURpZmZlcmVuY2U9Z2V0VGltZURpZmZlcmVuY2UoKTtcbiAgICAgICAgICAgICAgICAvLyBzaSBsJ3V0aWxpc2F0ZXVyIGEgcHLDqWPDqWRlbWVudCByw6lwb25kdSDDoCB1biBxdWl6LCBqJ2Fqb3V0ZSBsZXMgaW5mb3MgZGUgc29uIHLDqXN1bHRhdCA6XG4gICAgICAgICAgICAgICAgZGF0YXM9Y2hlY2tBbnN3ZXJEYXRhcyhkYXRhcyk7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXogb3UgZCd1biBncm91cGUgZGUgcXVpenNcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICAgICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkYXRhcy5Hcm91cElkPWFuc3dlci5Hcm91cElkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9sb2dpbkxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExhbmd1YWdlIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJkaXZSZXNwb25zZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJpc0Nvbm5lY3RlZCIsImNoZWNrU2Vzc2lvbiIsInNhdmVMb2NhbHkiLCJtZXNzYWdlIiwiY29sb3IiLCJ1c2VyIiwiZ2V0TG9jYWx5Iiwid2luZG93IiwibG9jYXRpb24iLCJhc3NpZ24iLCJkYXRhcyIsImdldFVybFBhcmFtcyIsInQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwidXNlcklkIiwiY29ubmV4aW9uVGltZSIsInRva2VuIiwiY29ubmV4aW9uTWF4VGltZSIsIm5vdyIsImVuZHNXaXRoIiwicGFyc2VJbnQiLCJzZXRTZXNzaW9uIiwicmVtb3ZlTG9jYWx5IiwiYWRkRWxlbWVudCIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJjaGVja0Fuc3dlckRhdGFzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJzdHJpbmdpZnkiLCJlIiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImNvbnNvbGUiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsImhvbWVQYWdlIiwicGFyYW1ldGVycyIsInNwbGl0IiwicGFyYW0iLCJkZWNvZGVVUkkiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJuYlF1ZXN0aW9ucyIsIlF1ZXN0aW9ubmFpcmVJZCIsIkdyb3VwSWQiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwib25sb2FkIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyxtQ0FBRCxDQUFyQjs7QUFDQSxJQUFNQyxjQUFjLEdBQUdELG1CQUFPLENBQUMscURB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QUo7QUFDSDtBQUNKO0FBQ0osR0F0RU0sQ0FBUDtBQXVFSCxDQXpFTSxDLENBMEVQOztBQUNBLE1BQU1rRCxZQUFZLEdBQUcsQ0FBQ04sY0FBRCxFQUFpQmxGLE9BQWpCLEVBQTBCbUYsU0FBMUIsS0FDckI7QUFDSSxNQUFHLENBQUNqTCwyREFBTyxDQUFDOEYsT0FBRCxDQUFYLEVBQ0lELG9FQUFVLENBQUMsU0FBRCxFQUFZQyxPQUFaLENBQVY7QUFDSixNQUFHLENBQUM5RiwyREFBTyxDQUFDaUwsU0FBRCxDQUFYLEVBQ0lwRixvRUFBVSxDQUFDLEtBQUQsRUFBUW9GLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ2pMLDJEQUFPLENBQUNnTCxjQUFELENBQVgsRUFDSTlFLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsTUFBaEIsQ0FBdUI0RSxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2xvZ2luTGluay5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9sb2dpbkxpbmsuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqSBhdSBzaXRlICFcIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBiYWRQYXNzd29yZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbmUgY29ycmVzcG9uZCBhdXggaW5mb3JtYXRpb25zIHNhaXNpZXMuXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsIFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgZmFpbEJvdFRlc3Q6IFwiVW4gcHJvYmzDqG1lIGEgw6l0w6kgcmVuY29udHLDqSBkdXJhbnQgdm90cmUgaW5zY3JpcHRpb24uIEVuIGNhcyBkZSBkaWZmaWN1bHTDqSwgbidow6lzaXRleiBwYXMgY29udGFjdGVyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBmYWlsQm90VGVzdExvZzogXCJVbmUgaW5zY3JpcHRpb24gYSDDqXTDqSBibG9xdcOpZSwgcGFyY2UgcXVlIGxlIGNoYW1wIGVtYWlsMiDDqXRhaXQgcmVuc2VpZ27DqSBhdmVjIDogXCIsXG4gICAgZm9ybXNFbWFpbExhYmVsOiBcIkUtbWFpbCA6XCIsXG4gICAgZm9ybXNFbWFpbFBsYWNlaG9sZGVyOiBcIlZvdHJlIGFkcmVzc2UgZS1tYWlsXCIsXG4gICAgZm9ybXNFbWFpbDJQbGFjZWhvbGRlcjogXCJTaSB2b3VzIHZveWV6IGNlIGNoYW1wLCBsYWlzc2V6LWxlIHZpZGVcIiwvL2NoYW1wIHF1aSBuZSBkZXZyYWl0IHBhcyDDqnRyZSB2aXNpYmxlIHBhciBkZXMgaHVtYWluc1xuICAgIGZvcm1zQ0dVT2tMYWJlbDogXCJKJ2FjY2VwdGUgPGEgaHJlZj0jbGluayB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgcmVsPVxcXCJub29wZW5lclxcXCIgdGl0bGU9XFxcIsOAIGxpcmUgOilcXFwiPmxlcyBDb25kaXRpb25zIEfDqW7DqXJhbGUgZCdVdGlsaXNhdGlvbjwvYT4gZHUgc2l0ZSAocmVxdWlzKS5cIixcbiAgICBmb3Jtc1N1Ym1pdFR4dDogXCJKZSBtJ2Fib25uZSAhXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgXFxcInBhcnJhaW5cXFwiIGEgYmllbiDDqXTDqSB0cm91dsOpLiBDZXR0ZSBwZXJzb25uZSBzZXJhIGF2ZXJ0aWUgcXVlIHZvdXMgbCdhdmV6IGTDqXNpZ27DqWUuXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiRMOpc29sw6kgbWFpcyBhdWN1biB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNlIGNvZGUgLyBlLW1haWwgZGUgcGFycmFpbmFnZSA6KFwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVscyA6IFwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NVc2VyTmJHb2RDaGlsZHM6IFwiVm9pY2kgbGVzICNOQiB1dGlsaXNhdGV1cihzKSBpbnNjcml0KHMpIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIgOiBcIixcbiAgICBpbmZvc1VzZXJOb0dvZGNoaWxkczogXCJQb3VyIGwnaW5zdGFudCwgYXVjdW5lIHBlcnNvbm5lIG5lIHMnZXN0IGluc2NyaXRlLCBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiLlwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBhIGV4cGlyw6kuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCAqVElNSU5HKiAhXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjxicj5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLjwvcD48cD5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuU2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy5cXG5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlLW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+Ljxicj5FbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb25cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtUeHQgOiBcIlZhbGlkZXIgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0IEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkJ8OqdHJlIGVudm95w6kgw6Agdm90cmUgYWRyZXNzZSBlLW1haWwgKCNFTUFJTCkuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgITxicj48YnI+U2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIDxiPkVNQUlMPC9iPi48YnI+PGJyPkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIDxiPkVNQUlMPC9iPiDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyA8Yj5wb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT48L2I+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuPGJyPjxicj5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIGNpLWRlc3NvdXMuPGJyPjxicj7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuXFxuXFxuUG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBzdWl2YW50IDogTElOS19VUkxcXG5cXG7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgdW4gc2VydmV1ciBTTVRQIHZhbGlkZS5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiTWVyY2kgZCdhY2NlcHRlciBsZXMgQ0dVIHBvdXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGNvbXB0ZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSBwb3V2b2lyIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBub3V2ZWF1IGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgbGUgcHJlc3NlLXBhcGllciBkZSB2b3RyZSBvcmRpbmF0ZXVyIChvdSBtb2JpbGUpLiBWb3VzIHBvdXZleiBsZSBcXFwiY29sbGVyXFxcIiBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgc2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0OiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJEw6lzb2zDqSBtYWlzIGlsIHkgYSBldSB0cm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdGV6IG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLiBWb3VzIHBvdXZleiB2b3VzIHkgY29ubmVjdGVyIDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBjb21wbMOpdGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgdm90cmUgYWJvbm5lbWVudCBjaS1kZXNzb3VzLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIuKAplwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxuXG4gICAgLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4gICAgLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG4gICAgc3RhdGljIGdldFBhc3N3b3JkIChuYkNhck1pbiwgbmJDYXJNYXgpXG4gICAge1xuICAgICAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgICAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgICAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgICAgICB9XG4gICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICByZXR1cm4gcGFzc3dvcmQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBsaWVucyBkZSBsJ2ludGVyZmFjZVxuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9uc1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIsIHRpdGxlOlwiQWNjw6lkZXIgb3UgY3LDqWV6IHZvdHJlIGNvbXB0ZSBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiLCB0aXRsZTpcIkVuIHNhdm9pciArIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiLCB0aXRsZTpcIlBhZ2UgZCdhY2N1ZWlsXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkxlIGJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiwgdGl0bGU6XCJRdWkgYSBjcsOpw6kgV2lraUxlcm5pID8gUXVlbHMgc29udCB2b3MgZHJvaXRzID9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiLCB0aXRsZTpcIlZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZTogXCJhZG1pbi5odG1sXCIsXG4gICAgY2d1UGFnZTogXCJDR1YtQ0dVLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLCAgICBcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2VUeHQgOiBcIk1hIHBhZ2UgZCdhY2N1ZWlsLlwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgLyogVGV4dGVzIChnw6luw6lyYWwpICovXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbiAgICBsaWNlbmNlVHh0OiBcIkBjb3B5bGVmdCBMZSBjb250ZW51IGRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgP1xcXCI+ZXN0IGxpYnJlPC9hPiBldCB2b3VzIGVzdCBvZmZlcnQgc2FucyBwdWJsaWNpdMOpLiBWb3VzIHBvdXZleiA8YSBocmVmPVxcXCIvcGFydGljaXBlci1maW5hbmNlbWVudC5odG1sXFxcIiB0aXRsZT1cXFwiRmluYW5jZW1lbnQgcGFydGljaXBhdGlmIGF2ZWMgY29udHJlLXBhcnRpZXNcXFwiPnBhcnRpY2lwZXIgw6Agc29uIGZpbmFuY2VtZW50IGVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgLyogUGFnZSBkJ2FjY3VlaWwgKi9cbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiPGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+Ljxicj5Wb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzLCBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLjxicj5EZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgPGI+ZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgY3VsdHVyZSBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBqYXJkaW48L2I+LlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIjxiPlBhcyBkZSBmYWl0cyBhbHRlcm5hdGlmczwvYj4sIHRvdXMgbGVzIGNvbnRlbnVzIHNvbnQgPGI+c291cmPDqXMgcGFyIGRlcyBhcnRpY2xlcyBXaWtpcMOpZGlhPC9iPi48YnI+RXQgdG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwdWJsacOpIHN1ciBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzIHN1ciBjZSBzdWpldFxcXCI+c29udCBwYXJ0YWfDqXMgc291cyBsaWNlbmNlcyBsaWJyZXM8L2E+Ljxicj5MZSB0b3V0IHNhbnMgcHVibGljaXTDqSwgbmkgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzLjxicj48Yj5TdXIgV2lraUxlcm5pLCB2b3VzIGN1bHRpdmV6IHZvdHJlIGphcmRpbiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjwvYj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSA/XCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogIFwiVGVzdGV6IFdpa2lMZXJuaVwiLFxuICAgIGhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZTogIFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIC8qIFBhZ2UgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuLi4gKi8gICBcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIldpa2lMZXJuaSA6IHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiPHA+PGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgcXVlbHF1ZSBjaG9zZSBkZSBub3V2ZWF1PC9iPjxicj5TaSBkZXNzb3VzIGxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4gVm91cyBwb3V2ZXogYXVzc2kgPGEgaHJlZj0nL3F1aXpzL3RoZW1lcy5odG1sJz5wYXJjb3VyaXIgbGUgc2l0ZSBwYXIgdGjDqG1lcyBvdSBtb3RzLWNsw6lzPC9hPi48L3A+XCIsXG4gICAgLyogUGxhbiBkdSBzaXRlLCBsaXN0ZSBkZXMgdGFncyAqLyAgIFxuICAgIHRhZ0xpc3RUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBkZXMgYXJ0aWNsZXMgZXQgcXVpenMgc3VyIGRlIG5vbWJyZXV4IHRow6htZXMgIVwiLFxuICAgIHRhZ0xpc3RNZXRhRGVzYzogXCJXaWtpTGVybmkgOiBkw6ljb3V2cmlyIGxlcyBkaWZmw6lyZW50cyB0aMOobWVzIGFib3Jkw6lzIHBhciBXaWtpTGVybmkuIElueGV4IGR1IHNpdGUuXCIsXG4gICAgdGFnTGlzdEludHJvOiBcIjxoMz5BdmVjIFdpa2lMZXJuaSwgZGV2ZW5leiBmb3J0IGVuIHRow6htZXMuLi4gT3VpIG1haXMgcXVlbHMgdGjDqG1lcyA/IDopPC9oMz48YmxvY2txdW90ZT5BcmlzdG90ZeKArzogwqvigK9M4oCZaG9tbWUgYSBuYXR1cmVsbGVtZW50IGxhIHBhc3Npb24gZGUgY29ubmHDrnRyZeKApuKAr8K7PC9ibG9ja3F1b3RlPlwiLFxuICAgIC8qIFBhZ2UgcXVpenMgKi9cbiAgICBhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQ6IFwiUmVsaXJlXCIsXG4gICAgcXVpekVsZW1lbnRMaW5rc0ludHJvOiBcIkVuIHNhdm9pciBwbHVzXCIsXG4gICAgcXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZTogXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5p4oCvP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIjxwPkxlIHByaW5jaXBlIGVzdCBzaW1wbGXigK86IDxiPnZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpPC9iPi4gUHVpcyB2b3VzIDxiPmFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZTwvYj4uIFN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgPGI+dW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXM8L2I+IGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gQ+KAmWVzdCB0b3Vqb3VycyA8Yj5sZSBjb250ZW51IGRlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pPC9iPiBjb25jZXJuYW50IGxlcyDCq+KAr2Jvbm5lc+KAr8K7IHLDqXBvbnNlcy4gQ+KAmWVzdCB1bmUgZmHDp29uIGRlIHRlc3RlciDDoCBsYSBmb2lzIHZvdHJlIGNhcGFjaXTDqSBk4oCZYXR0ZW50aW9uIGV0IHZvdHJlIG3DqW1vaXJlLiBMZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG7igJlow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPC9wPjxwPjxiPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZOKAmWF1dHJlcyBzb2x1dGlvbnMgcG91ciBhbcOpbGlvcmVyIHZvdHJlIGN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4uIFBvdXIgZW4gc2F2b2lyIHBsdXMsIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBleHBsYW5hdGlvbkVsZW1lbnRUeHQ6IFwiPHA+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBkZSA8Yj5yZWNldm9pciBwYXIgZS1tYWlsIMOgIGxhIGZyw6lxdWVuY2UgY2hvaXNpZSwgZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXM8L2I+IGV0IHBvcnRhbnQgc3VyIGRlcyBzdWpldHMgdHLDqHMgdmFyacOpcyBkZSA8Yj5jdWx0dXJlIGfDqW7DqXJhbGU8L2I+IChhcnRzLCBoaXN0b2lyZSwgbGl0dMOpcmF0dXJlLCBzY2llbmNlcywgZXRjLikuPC9wPjxwPkNlcyBhcnRpY2xlcyBzb250IGJhc8OpcyBzdXIgPGI+dW5lIG91IHBsdXNpZXVycyBwYWdlcyBkZSBXaWtpcMOpZGlhPC9iPiAoZm91cm5pZXMgZW4gbGllbiksIGRvbnQgPGI+aWxzIGV4dHJhaWVudCBjZXJ0YWluZXMgaW5mb3JtYXRpb25zPC9iPi48L3A+PHA+Q2hhcXVlIHPDqXJpZSBk4oCZYXJ0aWNsZXMgZXN0IDxiPnN1aXZpZSBk4oCZdW4gcXVpejwvYj4gcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPC9wPjxwPjxiPlZvdXMgYXBwcmVuZXogYWluc2kgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+IHRyw6hzIHNpbXBsZW1lbnQuPC9wPlwiLFxuICAgIC8qIEF1dHJlcyAqL1xuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICB0d2l0dGVyQWNjb3VudDogXCJXaWtpTGVybmlcIixcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG59OyIsIi8vIC0tIFBBR0UgUEVSTUVUVEFOVCBERSBURVNURVIgVU4gTElFTiBERSBDT05ORVhJT04gUkXDh1UgUEFSIEUtTUFJTFxuXG4vLy8gVW4gdG9rZW4gZXN0IHRyYW5zbWlzIGVuIHBhcmFtw6h0cmUgZGUgbCdVcmwuIElsIGEgdW5lIHZhbGlkaXTDqSBsaW1pdMOpIGRhbnMgbGUgdGVtcHMuXG4vLy8gRGFucyBjZSBjYXMsIG9uIHBldXQgcmVkaXJpZ2VyIGwndXRpbGlzYXRldXIgdmVycyBsYSBwYWdlIGRlIGNvbm5leGlvbiBwb3VyIG9idGVuaXIgdW4gbm91dmVhdSBsaWVuIGRlIHZhbGlkYXRpb25cbi8vLyBTaSBsZSB0b2tlbiBlc3Qgb2ssIG9uIGNyw6llIHVuZSBzZXNzaW9uIHN1aXZhbnQgbGEgZHVyw6llIHJldG91cm7DqWUgcGFyIGwnQVBJIGV0IHJlZGlyaWdlIGwndXRpbGlzYXRldXIgdmVycyBzYSBwYWdlIGQnYWNjdWVpbFxuLy8vIFVuIHLDqXN1bHRhdCBkZSBxdWl6IHBldXQgYXVzc2kgYXZvaXIgw6l0w6kgZW5yZWdpc3Ryw6kgY8O0dMOpIGNsaWVudCBldCBlc3QgYWxvcnMgw6AgdHJhbnNtZXR0cmUgw6AgbCdBUEkuXG4vLy8gU2kgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCB1bmUgc2Vzc2lvbiBhY3RpdmUgdmFsaWRlLCBjJ2VzdCBxdSdpbCBhIGTDqWrDoCBjbGlxdcOpIHN1ciBsZSBsaWVuLiBPbiBsZSByZWRpcmlnZSDDqWdhbGVtZW50IHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWwuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IHsgY29ubmVjdGlvblBhZ2UsIHVzZXJIb21lUGFnZSB9ID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuY29uc3QgeyBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSwgdXNlclJvdXRlcyB9ID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja0Fuc3dlckRhdGFzLCBjaGVja1Nlc3Npb24sIGdldFRpbWVEaWZmZXJlbmNlLCBzZXRTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB7IHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IGFscmVhZHlDb25uZWN0ZWQsIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSwgdmFsaWRhdGlvbk1lc3NhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIC8vIHNpIGwndXRpbGlzYXRldXIgZXN0IGTDqWrDoCBjb25uZWN0w6ksIHBhcyBsYSBwZWluZSBkJ2FsbGVyICsgbG9pbiA6XG4gICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbigpO1xuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgeyBtZXNzYWdlOiBhbHJlYWR5Q29ubmVjdGVkLCBjb2xvcjpcImluZm9cIiB9KTsvLyBwb3VyIGwnYWZmaWNoZXIgc3VyIGxhIHBhZ2Ugc3VpdmFudGVcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrdXNlckhvbWVQYWdlKTsvLyB0eXBlIGRlIGNvbm5leGlvbiBwb3NzaWJsZSBxdWUgcG91ciBsZXMgc2ltcGxlcyB1c2Vyc1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgaWYoZGF0YXMgJiYgZGF0YXMudCE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY29ubmVjdGlvbldpdGhMaW5rUm91dGUpO1xuICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmICFpc0VtcHR5KHJlc3BvbnNlLnVzZXJJZCkgJiYgIWlzRW1wdHkocmVzcG9uc2UuY29ubmV4aW9uVGltZSkgJiYgIWlzRW1wdHkocmVzcG9uc2UudG9rZW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25uZXhpb25NYXhUaW1lPURhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuY29ubmV4aW9uVGltZS5lbmRzV2l0aChcImRheXNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbk1heFRpbWUrPXBhcnNlSW50KHJlc3BvbnNlLmNvbm5leGlvblRpbWUsMTApKjI0KjM2MDAqMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbk1heFRpbWUrPXBhcnNlSW50KHJlc3BvbnNlLmNvbm5leGlvblRpbWUsMTApKjM2MDAqMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZXNzaW9uKHJlc3BvbnNlLnVzZXJJZCwgcmVzcG9uc2UudG9rZW4sIGNvbm5leGlvbk1heFRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcImxhc3RBbnN3ZXJcIik7Ly8gISBpbXBvcnRhbnQgcG91ciBuZSBwYXMgZW5yZWdpc3RlciBwbHVzaWV1cnMgZm9pcyBsZSByw6lzdWx0YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHZhbGlkYXRpb25NZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTsvLyBhdSBjYXMgb8O5IGJsb2NhZ2UgcmVkaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK3VzZXJIb21lUGFnZSk7Ly8gY29ubmV4aW9uIHBhciBsaWVuIG5lIGNvbmNlcm5lIHF1ZSBsZXMgc2ltcGxlcyBcInVzZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHRoaXMuc3RhdHVzID09PSA0MDEgfHwgdGhpcy5zdGF0dXMgPT09IDQwMykgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSBzZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBjb25uZWN0aW9uUGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhcy50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZSgpO1xuICAgICAgICAgICAgICAgIC8vIHNpIGwndXRpbGlzYXRldXIgYSBwcsOpY8OpZGVtZW50IHLDqXBvbmR1IMOgIHVuIHF1aXosIGonYWpvdXRlIGxlcyBpbmZvcyBkZSBzb24gcsOpc3VsdGF0IDpcbiAgICAgICAgICAgICAgICBkYXRhcz1jaGVja0Fuc3dlckRhdGFzKGRhdGFzKTtcbiAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/manageGroups.app.js b/front/public/JS/manageGroups.app.js index f4c6468..465ebd6 100644 --- a/front/public/JS/manageGroups.app.js +++ b/front/public/JS/manageGroups.app.js @@ -1026,10 +1026,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DU FORMULAIRE PERMETTANT DE SAISIR / ÉDITER LES INFOS DES GROUPES DE QUIZS /// Vérifie que l'utilisateur est bien connecté, a le bon statut et le redirige vers le formulaire d'inscription si ce n'est pas le cas. /// Si c'est ok, propose un moteur de recherche permettant de chercher un groupe. @@ -1037,11 +1033,11 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Si pas d'id passé par l'url, on affiche un formulaire vide permettant d'en saisir un nouveau. // Fichiers de configuration : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configQuestionnaires = __webpack_require__(/*! ../../config/questionnaires.js */ "../config/questionnaires.js"); +const configQuestionnaires = __webpack_require__(/*! ../../config/questionnaires.js */ "../config/questionnaires.js"); -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions : +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions : @@ -1052,34 +1048,37 @@ var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - addOkMessage = _require.addOkMessage, - serverError = _require.serverError; +const { + addOkMessage, + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/group$")("./" + lang + "/group"), - groupQuestionnairesList = _require2.groupQuestionnairesList, - groupQuestionnairesListWithout = _require2.groupQuestionnairesListWithout, - infosGroupForAdmin = _require2.infosGroupForAdmin, - searchWithoutResult = _require2.searchWithoutResult; +const { + groupQuestionnairesList, + groupQuestionnairesListWithout, + infosGroupForAdmin, + searchWithoutResult +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/group$")("./" + lang + "/group"); -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - needBeConnected = _require3.needBeConnected; // Principaux éléments du DOM manipulés : +const { + needBeConnected +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); // Principaux éléments du DOM manipulés : -var btnNewGroup = document.getElementById("wantNewGroup"); -var btnPreviewGroup = document.getElementById("previewGroup"); -var deleteCheckBox = document.getElementById("deleteOkLabel"); -var divCrash = document.getElementById("crash"); -var divGroupIntro = document.getElementById("groupIntro"); -var divMain = document.getElementById("main-content"); -var divMessage = document.getElementById("message"); -var divQuestionnaires = document.getElementById("questionnairesList"); -var divResponse = document.getElementById("response"); -var divSearchResult = document.getElementById("searchResult"); -var formGroup = document.getElementById("groups"); -var formSearch = document.getElementById("search"); // Fonction utile pour vider le formulaire, y compris les champs hidden, etc. +const btnNewGroup = document.getElementById("wantNewGroup"); +const btnPreviewGroup = document.getElementById("previewGroup"); +const deleteCheckBox = document.getElementById("deleteOkLabel"); +const divCrash = document.getElementById("crash"); +const divGroupIntro = document.getElementById("groupIntro"); +const divMain = document.getElementById("main-content"); +const divMessage = document.getElementById("message"); +const divQuestionnaires = document.getElementById("questionnairesList"); +const divResponse = document.getElementById("response"); +const divSearchResult = document.getElementById("searchResult"); +const formGroup = document.getElementById("groups"); +const formSearch = document.getElementById("search"); // Fonction utile pour vider le formulaire, y compris les champs hidden, etc. -var emptyGroupForm = function emptyGroupForm() { +const emptyGroupForm = () => { Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["empyForm"])(formGroup); // Case de suppression et bouton visualisation inutiles en mode création : deleteCheckBox.style.display = "none"; @@ -1089,27 +1088,27 @@ var emptyGroupForm = function emptyGroupForm() { }; // Fonction affichant les infos connues concernant un groupe. -var showFormGroupInfos = function showFormGroupInfos(id, token) { +const showFormGroupInfos = (id, token) => { // on commence par tout vider, des fois que... : emptyGroupForm(); - var xhrGetInfos = new XMLHttpRequest(); + const xhrGetInfos = new XMLHttpRequest(); xhrGetInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + configQuestionnaires.getGroupRoute + id); xhrGetInfos.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 200 && response.Group != undefined) { - var mapText = { + const mapText = { GROUP_ID: response.Group.id, DATE_CREA: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.Group.createdAt), DATE_UPDATE: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.Group.updatedAt), NB_ELEMENTS: response.Questionnaires !== undefined ? response.Questionnaires.length : 0 }; - var groupIntro = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(infosGroupForAdmin, mapText); + const groupIntro = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(infosGroupForAdmin, mapText); Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGroupIntro, "p", groupIntro, "", ["info"]); - for (var data in response.Group) { + for (let data in response.Group) { if (formGroup.elements[data] !== undefined) { if (data === "publishingAt" && response.Group[data] !== null) formGroup.elements[data].value = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.Group[data], "form"); // !! format pouvant poser soucis si navigateur ne gère pas les champs de type "date" else formGroup.elements[data].value = response.Group[data]; @@ -1121,14 +1120,12 @@ var showFormGroupInfos = function showFormGroupInfos(id, token) { if (response.Group["isPublishable"] === false) btnPreviewGroup.setAttribute("href", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + configQuestionnaires.previewGroupRoutes + "/" + id + "/" + token);else btnPreviewGroup.setAttribute("href", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configQuestionnaires.dirWebGroups + "/" + response.Group["slug"] + ".html"); // affichage des éléments du groupe : if (response.Questionnaires !== undefined && response.Questionnaires.length !== 0) { - var listHTML = "", + let listHTML = "", optionsDayStr = { weekday: 'long' }; - for (var i in response.Questionnaires) { - listHTML += "
  • " + response.Questionnaires[i].Questionnaire.title + "
  • "; - } + for (let i in response.Questionnaires) listHTML += "
  • " + response.Questionnaires[i].Questionnaire.title + "
  • "; if (response.Questionnaires.length !== 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestionnaires, "h3", groupQuestionnairesList.replace("#NB", response.Questionnaires.length));else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestionnaires, "h3", groupQuestionnairesListWithout); Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestionnaires, "ul", listHTML, "", "", "", false); @@ -1141,141 +1138,112 @@ var showFormGroupInfos = function showFormGroupInfos(id, token) { xhrGetInfos.send(); }; -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, urlDatas; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["checkSession"])(["manager", "admin"], "/" + configTemplate.connectionPage, { - message: needBeConnected, - color: "error" - }, window.location); +const initialise = async () => { + try { + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["checkSession"])(["manager", "admin"], "/" + configTemplate.connectionPage, { + message: needBeConnected, + color: "error" + }, window.location); - case 3: - isConnected = _context.sent; + if (isConnected) { + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); // lien "Compte" menu header template - if (isConnected) { - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); // lien "Compte" menu header template + divMain.style.display = "block"; - divMain.style.display = "block"; - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); - } // Initialisation des formulaires : + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); + } // Initialisation des formulaires : - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires, formSearch); - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires.Group, formGroup); - emptyGroupForm(); // Si un id est passé par l'url, on essaye d'afficher les infos : + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires, formSearch); + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires.Group, formGroup); + emptyGroupForm(); // Si un id est passé par l'url, on essaye d'afficher les infos : - urlDatas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_6__["getUrlParams"])(); - if (urlDatas && urlDatas.id !== undefined) showFormGroupInfos(urlDatas.id, user.token); // Besoin d'un coup de Kärcher ? + let urlDatas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_6__["getUrlParams"])(); + if (urlDatas && urlDatas.id !== undefined) showFormGroupInfos(urlDatas.id, user.token); // Besoin d'un coup de Kärcher ? - btnNewGroup.addEventListener("click", function (e) { - emptyGroupForm(); - }); // Envoi du formulaire principal : + btnNewGroup.addEventListener("click", function (e) { + emptyGroupForm(); + }); // Envoi du formulaire principal : - formGroup.addEventListener("submit", function (e) { - e.preventDefault(); - divResponse.innerHTML = ""; - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formGroup); - var xhrGroupDatas = new XMLHttpRequest(); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && datas.deleteOk !== undefined) xhrGroupDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + "/" + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrGroupDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + "/" + datas.id); // mise à jour - else xhrGroupDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes); // nouvel enregistrement + formGroup.addEventListener("submit", function (e) { + e.preventDefault(); + divResponse.innerHTML = ""; + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formGroup); + const xhrGroupDatas = new XMLHttpRequest(); + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && datas.deleteOk !== undefined) xhrGroupDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + "/" + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrGroupDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + "/" + datas.id); // mise à jour + else xhrGroupDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes); // nouvel enregistrement - xhrGroupDatas.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + xhrGroupDatas.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - if (this.status === 201 && response.id != undefined) // nouvel enregistrement créé - { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", addOkMessage, "", ["success"]); - datas.id = response.id; // utile pour réaffichage + bas - } else if (this.status === 200 && response.message != undefined) // mise à jour ou suppression ok - { - if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); - } else if (response.errors) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + if (this.status === 201 && response.id != undefined) // nouvel enregistrement créé + { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", addOkMessage, "", ["success"]); + datas.id = response.id; // utile pour réaffichage + bas + } else if (this.status === 200 && response.message != undefined) // mise à jour ou suppression ok + { + if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); + } else if (response.errors) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.errors)) { - if (datas.deleteOk === undefined) showFormGroupInfos(datas.id, user.token); // actualisation de l'affichage après traitement serveur - else emptyGroupForm(); - } - } - }; - - xhrGroupDatas.setRequestHeader("Content-Type", "application/json"); - xhrGroupDatas.setRequestHeader("Authorization", "Bearer " + user.token); - if (datas) xhrGroupDatas.send(JSON.stringify(datas)); - }); // Envoi d'une recherche - - formSearch.addEventListener("submit", function (e) { - e.preventDefault(); - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch); - var xhrSearch = new XMLHttpRequest(); - xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + configQuestionnaires.searchGroupsRoute); - - xhrSearch.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && Array.isArray(response)) { - if (response.length === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", searchWithoutResult, "", ["info"]);else { - var selectHTML = ""; - - for (var i in response) { - selectHTML += ""; - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "select", selectHTML, "selectSearch"); - var searchSelect = document.getElementById("selectSearch"); - searchSelect.addEventListener("change", function () { - if (searchSelect.value !== "") showFormGroupInfos(searchSelect.value, user.token); - }); - } - } else if (response.errors) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", serverError, "", ["error"]); - } - }; - - xhrSearch.setRequestHeader("Content-Type", "application/json"); - xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token); - if (datas) xhrSearch.send(JSON.stringify(datas)); - }); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.errors)) { + if (datas.deleteOk === undefined) showFormGroupInfos(datas.id, user.token); // actualisation de l'affichage après traitement serveur + else emptyGroupForm(); } + } + }; - _context.next = 11; - break; + xhrGroupDatas.setRequestHeader("Content-Type", "application/json"); + xhrGroupDatas.setRequestHeader("Authorization", "Bearer " + user.token); + if (datas) xhrGroupDatas.send(JSON.stringify(datas)); + }); // Envoi d'une recherche - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); - console.error(_context.t0); + formSearch.addEventListener("submit", function (e) { + e.preventDefault(); + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch); + const xhrSearch = new XMLHttpRequest(); + xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + configQuestionnaires.searchGroupsRoute); - case 11: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 7]]); - })); + xhrSearch.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + if (this.status === 200 && Array.isArray(response)) { + if (response.length === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", searchWithoutResult, "", ["info"]);else { + let selectHTML = ""; + + for (let i in response) selectHTML += ""; + + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "select", selectHTML, "selectSearch"); + const searchSelect = document.getElementById("selectSearch"); + searchSelect.addEventListener("change", function () { + if (searchSelect.value !== "") showFormGroupInfos(searchSelect.value, user.token); + }); + } + } else if (response.errors) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", serverError, "", ["error"]); + } + }; + + xhrSearch.setRequestHeader("Content-Type", "application/json"); + xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token); + if (datas) xhrSearch.send(JSON.stringify(datas)); + }); + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); + console.error(e); + } +}; initialise(); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); @@ -1296,14 +1264,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1321,32 +1288,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1370,13 +1326,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1397,25 +1353,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1423,49 +1371,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1486,14 +1412,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); // Fonction récupérant les paramètres passés par l'url -var getUrlParams = function getUrlParams() { +const getUrlParams = () => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); + const parameters = location.search.substring(1).split("&"); if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, + let param, datas = {}; - for (var i in parameters) { + for (let i in parameters) { param = parameters[i].split("="); if (param.length === 2) datas[param[0]] = decodeURI(param[1]); } @@ -1523,27 +1449,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1552,11 +1474,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1570,96 +1492,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1668,4 +1562,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL2dyb3VwJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ3JvdXAuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9tYW5hZ2VHcm91cHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImJ0blNlbmRSZXNwb25zZSIsImJ0blNoYXJlUXVpelR4dCIsImNvbW1vbkludHJvVHh0IiwiY29ycmVjdEFuc3dlclR4dCIsImdyb3Vwc05hbWUiLCJncm91cFF1ZXN0aW9ubmFpcmVzTGlzdCIsImdyb3VwUXVlc3Rpb25uYWlyZXNMaXN0V2l0aG91dCIsImhhdmVCZWVuUHVibGlzaGVkIiwiaW5mb3NHcm91cEZvckFkbWluIiwibGlua0ZpcnN0RWxlbWVudEdyb3VwIiwibGFzdFVwZGF0ZWQiLCJuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlIiwibmVlZExhbmd1YWdlIiwibmVlZE5vdFRvb0xvbmdUaXRsZSIsIm5lZWRUaXRsZSIsIm5lZWRVbmlxdWVVcmwiLCJuZWVkVXJsIiwibm90Rm91bmQiLCJwdWJsaXNoZWRBdCIsInB1Ymxpc2hlZEJ5Iiwic2VhcmNoSXNOb3RMb25nRW5vdWdoIiwic2VhcmNoV2l0aG91dFJlc3VsdCIsIndyb25nQW5zd2VyVHh0IiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJjb25maWdRdWVzdGlvbm5haXJlcyIsImNvbmZpZ1RlbXBsYXRlIiwiYnRuTmV3R3JvdXAiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYnRuUHJldmlld0dyb3VwIiwiZGVsZXRlQ2hlY2tCb3giLCJkaXZDcmFzaCIsImRpdkdyb3VwSW50cm8iLCJkaXZNYWluIiwiZGl2TWVzc2FnZSIsImRpdlF1ZXN0aW9ubmFpcmVzIiwiZGl2UmVzcG9uc2UiLCJkaXZTZWFyY2hSZXN1bHQiLCJmb3JtR3JvdXAiLCJmb3JtU2VhcmNoIiwiZW1wdHlHcm91cEZvcm0iLCJlbXB5Rm9ybSIsInN0eWxlIiwiZGlzcGxheSIsImlubmVySFRNTCIsInNob3dGb3JtR3JvdXBJbmZvcyIsInRva2VuIiwieGhyR2V0SW5mb3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwibWFwVGV4dCIsIkdST1VQX0lEIiwiREFURV9DUkVBIiwiZGF0ZUZvcm1hdCIsImNyZWF0ZWRBdCIsIkRBVEVfVVBEQVRFIiwidXBkYXRlZEF0IiwiTkJfRUxFTUVOVFMiLCJRdWVzdGlvbm5haXJlcyIsImdyb3VwSW50cm8iLCJyZXBsYWNlQWxsIiwiYWRkRWxlbWVudCIsImRhdGEiLCJlbGVtZW50cyIsInNldEF0dHJpYnV0ZSIsImxpc3RIVE1MIiwib3B0aW9uc0RheVN0ciIsIndlZWtkYXkiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsImluaXRpYWxpc2UiLCJjaGVja1Nlc3Npb24iLCJtZXNzYWdlIiwiY29sb3IiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImlzQ29ubmVjdGVkIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwicmVtb3ZlTG9jYWx5Iiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwidXJsRGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJHcm91cERhdGFzIiwiZGVsZXRlT2siLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJzdHJpbmdpZnkiLCJ4aHJTZWFyY2giLCJzZWxlY3RIVE1MIiwic2VhcmNoU2VsZWN0IiwiY29uc29sZSIsImVycm9yIiwiaGVsbG9EZXYiLCJzYXZlTG9jYWx5IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwiaW5wdXRzQ29uZiIsIm15Rm9ybSIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsInR5cGUiLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwicGFyYW1ldGVycyIsInNwbGl0IiwicGFyYW0iLCJkZWNvZGVVUkkiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwibmJRdWVzdGlvbnMiLCJRdWVzdGlvbm5haXJlSWQiLCJHcm91cElkIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsIm5vdyIsInhociIsIm9ubG9hZCIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsImFzc2lnbiIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7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QTBCa0YsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUNoTywyREFBTyxDQUFDOEksT0FBRCxDQUFYLEVBQ0k2QixvRUFBVSxDQUFDLFNBQUQsRUFBWTdCLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQzlJLDJEQUFPLENBQUNnTyxTQUFELENBQVgsRUFDSXJELG9FQUFVLENBQUMsS0FBRCxFQUFRcUQsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDaE8sMkRBQU8sQ0FBQytOLGNBQUQsQ0FBWCxFQUNJL0UsTUFBTSxDQUFDQyxRQUFQLENBQWdCOEYsTUFBaEIsQ0FBdUJoQixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL21hbmFnZUdyb3Vwcy5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9tYW5hZ2VHcm91cHMuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dyb3VwXCI6IFwiLi4vbGFuZy9mci9ncm91cC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dyb3VwJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYnRuU2VuZFJlc3BvbnNlOiBcIlRlc3RleiB2b3MgcsOpcG9uc2VzLlwiLFxuICAgIGJ0blNoYXJlUXVpelR4dDogXCJQYXJ0YWdlciBjZSBxdWl6IHN1ciBcIiwgICBcbiAgICBjb21tb25JbnRyb1R4dDogXCJDZSBxdWl6IHZvdXMgcGVybWV0IHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZXMgYXJ0aWNsZXMgcXVpIHZvdXMgb250IMOpdMOpIHByb3Bvc8OpcyBwcsOpY8OpZGVtbWVudCDDoCBsYSBsZWN0dXJlLiBBdSBiZXNvaW4sIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzIHBvdXIgbGVzIChyZSlsaXJlLlwiLFxuICAgIGNvcnJlY3RBbnN3ZXJUeHQ6IFwiQm9ubmUgcsOpcG9uc2VcIiwgICAgXG4gICAgZ3JvdXBzTmFtZTogXCJRdWl6XCIsLy8gbm9tIGQndW4gZ3JvdXBlIHBvdXIgbCdhZmZpY2hhZ2UgZGFucyBsZXMgdnVlc1xuICAgIGdyb3VwUXVlc3Rpb25uYWlyZXNMaXN0IDogXCJMZXMgI05CIMOpbMOpbWVudHMgZW5yZWdpc3Ryw6lzIHBvdXIgY2UgZ3JvdXBlXCIsXG4gICAgZ3JvdXBRdWVzdGlvbm5haXJlc0xpc3RXaXRob3V0IDogXCJBdWN1biDDqWzDqW1lbnQgbidhIMOpdMOpIGVucmVnaXN0csOpIHBvdXIgY2UgZ3JvdXBlLlwiLCAgXG4gICAgaGF2ZUJlZW5QdWJsaXNoZWQ6IFwiI05CIG5vdXZlYXV4IGdyb3VwZXMgZGUgcXVpenMgb250IMOpdMOpIHB1Ymxpw6lzLlwiLFxuICAgIGluZm9zR3JvdXBGb3JBZG1pbjogXCJDZSBncm91cGUgZGUgcXVpenMgYSDDqXTDqSBjcsOpw6kgbGUgREFURV9DUkVBLCBtaXNlIMOgIGpvdXIgbGEgZGVybmnDqHJlIGZvaXMgbGUgREFURV9VUERBVEUuPGJyPlNvbiBpZGVudGlmaWFudCBlc3QgPGI+R1JPVVBfSUQ8L2I+LiBJbCByZWdyb3VwZSBhY3R1ZWxsZW1lbnQgbGVzIHF1ZXN0aW9ucyBkZSBOQl9FTEVNRU5UUyBxdWl6cy5cIixcbiAgICBsaW5rRmlyc3RFbGVtZW50R3JvdXA6IFwiUmV0b3VyIGF1IHByZW1pZXIgYXJ0aWNsZS5cIixcbiAgICBsYXN0VXBkYXRlZDogXCJEZXJuacOocmUgbWlzZSDDoCBqb3VyIGxlIFwiLCAgICBcbiAgICBuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlOiBcIkxhIGRhdGUgZGUgcHVibGljYXRpb24gZm91cm5pZSBuJ2EgcGFzIHVuIGZvcm1hdCB2YWxpZGUuXCIsXG4gICAgbmVlZExhbmd1YWdlOiBcIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBsYSBsYW5ndWUgZGUgY2UgZ3JvdXBlIGRlIHF1aXpzLlwiLFxuICAgIG5lZWROb3RUb29Mb25nVGl0bGU6IFwiTGUgdGl0cmUgZHUgZ3JvdXBlIGRlIHF1aXpzIG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsICAgICAgICAgICAgICAgICBcbiAgICBuZWVkVGl0bGU6IFwiTWVyY2kgZGUgZm91cm5pciB1biB0aXRyZSDDoCBjZSBncm91cGUgZGUgcXVpenMuXCIsXG4gICAgbmVlZFVuaXF1ZVVybDogXCJMJ3VybCBkdSBncm91cGUgZGUgcXVpenMgZG9pdCDDqnRyZSB1bmlxdWUuXCIsXG4gICAgbmVlZFVybDogXCJNZXJjaSBkZSBmb3VybmlyIGwndXJsIMOgIGNlIGdyb3VwZSBkZSBxdWl6cy5cIixcbiAgICBub3RGb3VuZDogXCJMZSBncm91cGUgZGUgcXVpenMgKCNTRUFSQ0gpIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBwdWJsaXNoZWRBdDogXCIgbGVcIixcbiAgICBwdWJsaXNoZWRCeTogXCJRdWl6IHB1Ymxpw6kgcGFyXCIsXG4gICAgc2VhcmNoSXNOb3RMb25nRW5vdWdoOiBcIlZvdXMgZGV2ZXogc2Fpc2lyIGF1IG1vaW5zICNNSU4gY2FyYWN0w6hyZXMgcG91ciB2b3RyZSByZWNoZXJjaGUuXCIsXG4gICAgc2VhcmNoV2l0aG91dFJlc3VsdDogXCJBdWN1biBncm91cGUgbidhIMOpdMOpIHRyb3V2w6kgcG91ciB2b3RyZSByZWNoZXJjaGUuXCIsXG4gICAgd3JvbmdBbnN3ZXJUeHQ6IFwiTWF1dmFpc2UgcsOpcG9uc2VcIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBERSBTQUlTSVIgLyDDiURJVEVSIExFUyBJTkZPUyBERVMgR1JPVVBFUyBERSBRVUlaU1xuXG4vLy8gVsOpcmlmaWUgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2UgdmVycyBsZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24gc2kgY2Ugbidlc3QgcGFzIGxlIGNhcy5cbi8vLyBTaSBjJ2VzdCBvaywgcHJvcG9zZSB1biBtb3RldXIgZGUgcmVjaGVyY2hlIHBlcm1ldHRhbnQgZGUgY2hlcmNoZXIgdW4gZ3JvdXBlLlxuLy8vIFNpIHVuIGlkIGVzdCBwYXNzw6kgcGFyIGwndXJsIG9uIGFmZmljaGUgbGVzIGluZm9ybWF0aW9ucyBkdSBncm91cGUgZGFucyB1biBmb3JtdWxhaXJlIHBlcm1ldHRhbnQgZGUgbCfDqWRpdGVyL3N1cHByaW1lci5cbi8vLyBTaSBwYXMgZCdpZCBwYXNzw6kgcGFyIGwndXJsLCBvbiBhZmZpY2hlIHVuIGZvcm11bGFpcmUgdmlkZSBwZXJtZXR0YW50IGQnZW4gc2Fpc2lyIHVuIG5vdXZlYXUuXG5cbi8vIEZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24gOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnUXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzXCIpO1xuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEZvbmN0aW9ucyA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGVtcHlGb3JtLCBnZXREYXRhc0Zyb21JbnB1dHMsIHNldEF0dHJpYnV0ZXNUb0lucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBkYXRlRm9ybWF0LCBpc0VtcHR5LCByZXBsYWNlQWxsIH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB7IGFkZE9rTWVzc2FnZSwgc2VydmVyRXJyb3IgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHsgZ3JvdXBRdWVzdGlvbm5haXJlc0xpc3QsIGdyb3VwUXVlc3Rpb25uYWlyZXNMaXN0V2l0aG91dCwgaW5mb3NHcm91cEZvckFkbWluLCBzZWFyY2hXaXRob3V0UmVzdWx0IH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dyb3VwXCIpO1xuY29uc3QgeyBuZWVkQmVDb25uZWN0ZWQgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGJ0bk5ld0dyb3VwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ3YW50TmV3R3JvdXBcIik7XG5jb25zdCBidG5QcmV2aWV3R3JvdXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByZXZpZXdHcm91cFwiKTtcbmNvbnN0IGRlbGV0ZUNoZWNrQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWxldGVPa0xhYmVsXCIpO1xuY29uc3QgZGl2Q3Jhc2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNyYXNoXCIpO1xuY29uc3QgZGl2R3JvdXBJbnRybyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ3JvdXBJbnRyb1wiKTtcbmNvbnN0IGRpdk1haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4tY29udGVudFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZRdWVzdGlvbm5haXJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZXNMaXN0XCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZGl2U2VhcmNoUmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hSZXN1bHRcIik7XG5jb25zdCBmb3JtR3JvdXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdyb3Vwc1wiKTtcbmNvbnN0IGZvcm1TZWFyY2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlYXJjaFwiKTtcblxuLy8gRm9uY3Rpb24gdXRpbGUgcG91ciB2aWRlciBsZSBmb3JtdWxhaXJlLCB5IGNvbXByaXMgbGVzIGNoYW1wcyBoaWRkZW4sIGV0Yy5cbmNvbnN0IGVtcHR5R3JvdXBGb3JtID0gKCkgPT5cbntcbiAgICBlbXB5Rm9ybShmb3JtR3JvdXApO1xuICAgIC8vIENhc2UgZGUgc3VwcHJlc3Npb24gZXQgYm91dG9uIHZpc3VhbGlzYXRpb24gaW51dGlsZXMgZW4gbW9kZSBjcsOpYXRpb24gOlxuICAgIGRlbGV0ZUNoZWNrQm94LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgYnRuUHJldmlld0dyb3VwLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7ICAgXG4gICAgLy8gSW50cm8gw6AgdmlkZXIgIVxuICAgIGRpdkdyb3VwSW50cm8uaW5uZXJIVE1MPVwiXCI7XG59XG5cbi8vIEZvbmN0aW9uIGFmZmljaGFudCBsZXMgaW5mb3MgY29ubnVlcyBjb25jZXJuYW50IHVuIGdyb3VwZS5cbmNvbnN0IHNob3dGb3JtR3JvdXBJbmZvcyA9IChpZCwgdG9rZW4pID0+XG57XG4gICAgLy8gb24gY29tbWVuY2UgcGFyIHRvdXQgdmlkZXIsIGRlcyBmb2lzIHF1ZS4uLiA6XG4gICAgZW1wdHlHcm91cEZvcm0oKTtcbiAgICBjb25zdCB4aHJHZXRJbmZvcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhockdldEluZm9zLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLmdyb3VwUm91dGVzK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLmdldEdyb3VwUm91dGUraWQpO1xuICAgIHhockdldEluZm9zLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuR3JvdXAgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcFRleHQgPVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgR1JPVVBfSUQgOiByZXNwb25zZS5Hcm91cC5pZCxcbiAgICAgICAgICAgICAgICAgICAgREFURV9DUkVBIDogZGF0ZUZvcm1hdChyZXNwb25zZS5Hcm91cC5jcmVhdGVkQXQpLFxuICAgICAgICAgICAgICAgICAgICBEQVRFX1VQREFURSA6IGRhdGVGb3JtYXQocmVzcG9uc2UuR3JvdXAudXBkYXRlZEF0KSxcbiAgICAgICAgICAgICAgICAgICAgTkJfRUxFTUVOVFMgOiAocmVzcG9uc2UuUXVlc3Rpb25uYWlyZXMhPT11bmRlZmluZWQpID8gcmVzcG9uc2UuUXVlc3Rpb25uYWlyZXMubGVuZ3RoIDogMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBJbnRybz1yZXBsYWNlQWxsKGluZm9zR3JvdXBGb3JBZG1pbiwgbWFwVGV4dCk7XG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZHcm91cEludHJvLCBcInBcIiwgZ3JvdXBJbnRybywgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIHJlc3BvbnNlLkdyb3VwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoZm9ybUdyb3VwLmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhPT09XCJwdWJsaXNoaW5nQXRcIiAmJiByZXNwb25zZS5Hcm91cFtkYXRhXSE9PW51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmVsZW1lbnRzW2RhdGFdLnZhbHVlPWRhdGVGb3JtYXQocmVzcG9uc2UuR3JvdXBbZGF0YV0sIFwiZm9ybVwiKTsvLyAhISBmb3JtYXQgcG91dmFudCBwb3NlciBzb3VjaXMgc2kgbmF2aWdhdGV1ciBuZSBnw6hyZSBwYXMgbGVzIGNoYW1wcyBkZSB0eXBlIFwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuZWxlbWVudHNbZGF0YV0udmFsdWU9cmVzcG9uc2UuR3JvdXBbZGF0YV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVsZXRlQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgYnRuUHJldmlld0dyb3VwLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLkdyb3VwW1wiaXNQdWJsaXNoYWJsZVwiXSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIGJ0blByZXZpZXdHcm91cC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5ncm91cFJvdXRlcytjb25maWdRdWVzdGlvbm5haXJlcy5wcmV2aWV3R3JvdXBSb3V0ZXMrXCIvXCIraWQrXCIvXCIrdG9rZW4pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYnRuUHJldmlld0dyb3VwLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgc2l0ZVVybCtcIi9cIitjb25maWdRdWVzdGlvbm5haXJlcy5kaXJXZWJHcm91cHMrXCIvXCIrcmVzcG9uc2UuR3JvdXBbXCJzbHVnXCJdK1wiLmh0bWxcIik7XG4gICAgICAgICAgICAgICAgLy8gYWZmaWNoYWdlIGRlcyDDqWzDqW1lbnRzIGR1IGdyb3VwZSA6XG4gICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuUXVlc3Rpb25uYWlyZXMgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5RdWVzdGlvbm5haXJlcy5sZW5ndGggIT09IDApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdEhUTUw9XCJcIiwgb3B0aW9uc0RheVN0ciA9IHsgd2Vla2RheTogJ2xvbmcnfTtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlLlF1ZXN0aW9ubmFpcmVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEhUTUwrPVwiPGxpPjxhIGhyZWY9J1wiK2NvbmZpZ1RlbXBsYXRlLnF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UrXCI/aWQ9XCIrcmVzcG9uc2UuUXVlc3Rpb25uYWlyZXNbaV0uUXVlc3Rpb25uYWlyZS5pZCtcIicgaWQ9J3F1ZXN0aW9ubmFpcmVfXCIrcmVzcG9uc2UuUXVlc3Rpb25uYWlyZXNbaV0uUXVlc3Rpb25uYWlyZS5pZCtcIic+XCIrcmVzcG9uc2UuUXVlc3Rpb25uYWlyZXNbaV0uUXVlc3Rpb25uYWlyZS50aXRsZStcIjwvYT48L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5RdWVzdGlvbm5haXJlcy5sZW5ndGghPT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbm5haXJlcywgXCJoM1wiLCBncm91cFF1ZXN0aW9ubmFpcmVzTGlzdC5yZXBsYWNlKFwiI05CXCIsIHJlc3BvbnNlLlF1ZXN0aW9ubmFpcmVzLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcImgzXCIsIGdyb3VwUXVlc3Rpb25uYWlyZXNMaXN0V2l0aG91dCk7ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbm5haXJlcywgXCJ1bFwiLCBsaXN0SFRNTCwgXCJcIiwgXCJcIiwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB4aHJHZXRJbmZvcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit0b2tlbik7XG4gICAgeGhyR2V0SW5mb3Muc2VuZCgpO1xufVxuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihbXCJtYW5hZ2VyXCIsIFwiYWRtaW5cIl0sIFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IG5lZWRCZUNvbm5lY3RlZCwgY29sb3I6XCJlcnJvclwiIH0sIHdpbmRvdy5sb2NhdGlvbik7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpOy8vIGxpZW4gXCJDb21wdGVcIiBtZW51IGhlYWRlciB0ZW1wbGF0ZVxuICAgICAgICAgICAgZGl2TWFpbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGdldExvY2FseShcIm1lc3NhZ2VcIikpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIGdldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkubWVzc2FnZSwgXCJcIiwgW2dldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkuY29sb3JdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEluaXRpYWxpc2F0aW9uIGRlcyBmb3JtdWxhaXJlcyA6XG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnUXVlc3Rpb25uYWlyZXMsIGZvcm1TZWFyY2gpO1xuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1F1ZXN0aW9ubmFpcmVzLkdyb3VwLCBmb3JtR3JvdXApO1xuICAgICAgICAgICAgZW1wdHlHcm91cEZvcm0oKTtcbiAgICAgICAgICAgIC8vIFNpIHVuIGlkIGVzdCBwYXNzw6kgcGFyIGwndXJsLCBvbiBlc3NheWUgZCdhZmZpY2hlciBsZXMgaW5mb3MgOlxuICAgICAgICAgICAgbGV0IHVybERhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgaWYodXJsRGF0YXMgJiYgdXJsRGF0YXMuaWQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2hvd0Zvcm1Hcm91cEluZm9zKHVybERhdGFzLmlkLCB1c2VyLnRva2VuKTtcbiAgICAgICAgICAgIC8vIEJlc29pbiBkJ3VuIGNvdXAgZGUgS8OkcmNoZXIgPyBcbiAgICAgICAgICAgIGJ0bk5ld0dyb3VwLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVtcHR5R3JvdXBGb3JtKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEVudm9pIGR1IGZvcm11bGFpcmUgcHJpbmNpcGFsIDpcbiAgICAgICAgICAgIGZvcm1Hcm91cC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybUdyb3VwKTtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHJHcm91cERhdGFzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkoZGF0YXMuaWQpICYmIChkYXRhcy5kZWxldGVPayAhPT0gdW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgeGhyR3JvdXBEYXRhcy5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5ncm91cFJvdXRlcytcIi9cIitkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZighaXNFbXB0eShkYXRhcy5pZCkpXG4gICAgICAgICAgICAgICAgICAgIHhockdyb3VwRGF0YXMub3BlbihcIlBVVFwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMuZ3JvdXBSb3V0ZXMrXCIvXCIrZGF0YXMuaWQpOy8vIG1pc2Ugw6Agam91clxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgeGhyR3JvdXBEYXRhcy5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMuZ3JvdXBSb3V0ZXMpOy8vIG5vdXZlbCBlbnJlZ2lzdHJlbWVudFxuICAgICAgICAgICAgICAgIHhockdyb3VwRGF0YXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMSAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpIC8vIG5vdXZlbCBlbnJlZ2lzdHJlbWVudCBjcsOpw6lcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgYWRkT2tNZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5pZD1yZXNwb25zZS5pZDsgLy8gdXRpbGUgcG91ciByw6lhZmZpY2hhZ2UgKyBiYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSB1bmRlZmluZWQpIC8vIG1pc2Ugw6Agam91ciBvdSBzdXBwcmVzc2lvbiBva1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNFbXB0eShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLmRlbGV0ZU9rID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtR3JvdXBJbmZvcyhkYXRhcy5pZCwgdXNlci50b2tlbik7Ly8gYWN0dWFsaXNhdGlvbiBkZSBsJ2FmZmljaGFnZSBhcHLDqHMgdHJhaXRlbWVudCBzZXJ2ZXVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eUdyb3VwRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhockdyb3VwRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgeGhyR3JvdXBEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICAgICAgeGhyR3JvdXBEYXRhcy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gRW52b2kgZCd1bmUgcmVjaGVyY2hlXG4gICAgICAgICAgICBmb3JtU2VhcmNoLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHJTZWFyY2ggPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHJTZWFyY2gub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLmdyb3VwUm91dGVzK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnNlYXJjaEdyb3Vwc1JvdXRlKTtcbiAgICAgICAgICAgICAgICB4aHJTZWFyY2gub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInBcIiwgc2VhcmNoV2l0aG91dFJlc3VsdCwgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdEhUTUw9XCI8b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RIVE1MKz1cIjxvcHRpb24gdmFsdWU9J1wiK3Jlc3BvbnNlW2ldLmlkK1wiJz5cIityZXNwb25zZVtpXS50aXRsZStcIjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJzZWxlY3RcIiwgc2VsZWN0SFRNTCwgXCJzZWxlY3RTZWFyY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFNlbGVjdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdFNlYXJjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzZWFyY2hTZWxlY3QudmFsdWUgIT09IFwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1Hcm91cEluZm9zKHNlYXJjaFNlbGVjdC52YWx1ZSwgdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZDcmFzaCwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpO1xuaGVsbG9EZXYoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXogb3UgZCd1biBncm91cGUgZGUgcXVpenNcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICAgICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkYXRhcy5Hcm91cElkPWFuc3dlci5Hcm91cElkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL2dyb3VwJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ3JvdXAuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9tYW5hZ2VHcm91cHMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImJ0blNlbmRSZXNwb25zZSIsImJ0blNoYXJlUXVpelR4dCIsImNvbW1vbkludHJvVHh0IiwiY29ycmVjdEFuc3dlclR4dCIsImdyb3Vwc05hbWUiLCJncm91cFF1ZXN0aW9ubmFpcmVzTGlzdCIsImdyb3VwUXVlc3Rpb25uYWlyZXNMaXN0V2l0aG91dCIsImhhdmVCZWVuUHVibGlzaGVkIiwiaW5mb3NHcm91cEZvckFkbWluIiwibGlua0ZpcnN0RWxlbWVudEdyb3VwIiwibGFzdFVwZGF0ZWQiLCJuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlIiwibmVlZExhbmd1YWdlIiwibmVlZE5vdFRvb0xvbmdUaXRsZSIsIm5lZWRUaXRsZSIsIm5lZWRVbmlxdWVVcmwiLCJuZWVkVXJsIiwibm90Rm91bmQiLCJwdWJsaXNoZWRBdCIsInB1Ymxpc2hlZEJ5Iiwic2VhcmNoSXNOb3RMb25nRW5vdWdoIiwic2VhcmNoV2l0aG91dFJlc3VsdCIsIndyb25nQW5zd2VyVHh0IiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJjb25maWdRdWVzdGlvbm5haXJlcyIsImNvbmZpZ1RlbXBsYXRlIiwiYnRuTmV3R3JvdXAiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYnRuUHJldmlld0dyb3VwIiwiZGVsZXRlQ2hlY2tCb3giLCJkaXZDcmFzaCIsImRpdkdyb3VwSW50cm8iLCJkaXZNYWluIiwiZGl2TWVzc2FnZSIsImRpdlF1ZXN0aW9ubmFpcmVzIiwiZGl2UmVzcG9uc2UiLCJkaXZTZWFyY2hSZXN1bHQiLCJmb3JtR3JvdXAiLCJmb3JtU2VhcmNoIiwiZW1wdHlHcm91cEZvcm0iLCJlbXB5Rm9ybSIsInN0eWxlIiwiZGlzcGxheSIsImlubmVySFRNTCIsInNob3dGb3JtR3JvdXBJbmZvcyIsInRva2VuIiwieGhyR2V0SW5mb3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwibWFwVGV4dCIsIkdST1VQX0lEIiwiREFURV9DUkVBIiwiZGF0ZUZvcm1hdCIsImNyZWF0ZWRBdCIsIkRBVEVfVVBEQVRFIiwidXBkYXRlZEF0IiwiTkJfRUxFTUVOVFMiLCJRdWVzdGlvbm5haXJlcyIsImdyb3VwSW50cm8iLCJyZXBsYWNlQWxsIiwiYWRkRWxlbWVudCIsImRhdGEiLCJlbGVtZW50cyIsInNldEF0dHJpYnV0ZSIsImxpc3RIVE1MIiwib3B0aW9uc0RheVN0ciIsIndlZWtkYXkiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsImluaXRpYWxpc2UiLCJpc0Nvbm5lY3RlZCIsImNoZWNrU2Vzc2lvbiIsIm1lc3NhZ2UiLCJjb2xvciIsIndpbmRvdyIsImxvY2F0aW9uIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwicmVtb3ZlTG9jYWx5Iiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwidXJsRGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJHcm91cERhdGFzIiwiZGVsZXRlT2siLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJzdHJpbmdpZnkiLCJ4aHJTZWFyY2giLCJzZWxlY3RIVE1MIiwic2VhcmNoU2VsZWN0IiwiY29uc29sZSIsImVycm9yIiwiaGVsbG9EZXYiLCJzYXZlTG9jYWx5IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwiaW5wdXRzQ29uZiIsIm15Rm9ybSIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllIiwiZW50cmllcyIsInR5cGUiLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwicGFyYW1ldGVycyIsInNwbGl0IiwicGFyYW0iLCJkZWNvZGVVUkkiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwibmJRdWVzdGlvbnMiLCJRdWVzdGlvbm5haXJlSWQiLCJHcm91cElkIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsIm5vdyIsInhociIsIm9ubG9hZCIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsImFzc2lnbiIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7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RkFBWSxDQUFDLE1BQUQsQ0FBWjtBQUNBK0UsMEJBQVksQ0FBQ04sY0FBRCxFQUFpQmhGLE9BQWpCLEVBQTBCaUYsU0FBMUIsQ0FBWjtBQUNBRSxxQkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNIO0FBQ0osV0FsQ0QsTUFvQ0E7QUFDSTVFLGtGQUFZLENBQUMsTUFBRCxDQUFaO0FBQ0ErRSx3QkFBWSxDQUFDTixjQUFELEVBQWlCaEYsT0FBakIsRUFBMEJpRixTQUExQixDQUFaO0FBQ0FFLG1CQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixTQTVDRDs7QUE2Q0FLLFdBQUcsQ0FBQ1MsT0FBSixHQUFjLE1BQU1iLE1BQU0sQ0FBQ0ksR0FBRyxDQUFDVSxVQUFMLENBQTFCOztBQUNBVixXQUFHLENBQUM1RixJQUFKO0FBQ0g7QUFDSjtBQUNKLEdBdEVNLENBQVA7QUF1RUgsQ0F6RU0sQyxDQTBFUDs7QUFDQSxNQUFNMEYsWUFBWSxHQUFHLENBQUNOLGNBQUQsRUFBaUJoRixPQUFqQixFQUEwQmlGLFNBQTFCLEtBQ3JCO0FBQ0ksTUFBRyxDQUFDaE8sMkRBQU8sQ0FBQytJLE9BQUQsQ0FBWCxFQUNJNEIsb0VBQVUsQ0FBQyxTQUFELEVBQVk1QixPQUFaLENBQVY7QUFDSixNQUFHLENBQUMvSSwyREFBTyxDQUFDZ08sU0FBRCxDQUFYLEVBQ0lyRCxvRUFBVSxDQUFDLEtBQUQsRUFBUXFELFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ2hPLDJEQUFPLENBQUMrTixjQUFELENBQVgsRUFDSTlFLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQjZGLE1BQWhCLENBQXVCaEIsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9tYW5hZ2VHcm91cHMuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbWFuYWdlR3JvdXBzLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9ncm91cFwiOiBcIi4uL2xhbmcvZnIvZ3JvdXAuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9ncm91cCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGJ0blNlbmRSZXNwb25zZTogXCJUZXN0ZXogdm9zIHLDqXBvbnNlcy5cIixcbiAgICBidG5TaGFyZVF1aXpUeHQ6IFwiUGFydGFnZXIgY2UgcXVpeiBzdXIgXCIsICAgXG4gICAgY29tbW9uSW50cm9UeHQ6IFwiQ2UgcXVpeiB2b3VzIHBlcm1ldCB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGVzIGFydGljbGVzIHF1aSB2b3VzIG9udCDDqXTDqSBwcm9wb3PDqXMgcHLDqWPDqWRlbW1lbnQgw6AgbGEgbGVjdHVyZS4gQXUgYmVzb2luLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cyBwb3VyIGxlcyAocmUpbGlyZS5cIixcbiAgICBjb3JyZWN0QW5zd2VyVHh0OiBcIkJvbm5lIHLDqXBvbnNlXCIsICAgIFxuICAgIGdyb3Vwc05hbWU6IFwiUXVpelwiLC8vIG5vbSBkJ3VuIGdyb3VwZSBwb3VyIGwnYWZmaWNoYWdlIGRhbnMgbGVzIHZ1ZXNcbiAgICBncm91cFF1ZXN0aW9ubmFpcmVzTGlzdCA6IFwiTGVzICNOQiDDqWzDqW1lbnRzIGVucmVnaXN0csOpcyBwb3VyIGNlIGdyb3VwZVwiLFxuICAgIGdyb3VwUXVlc3Rpb25uYWlyZXNMaXN0V2l0aG91dCA6IFwiQXVjdW4gw6lsw6ltZW50IG4nYSDDqXTDqSBlbnJlZ2lzdHLDqSBwb3VyIGNlIGdyb3VwZS5cIiwgIFxuICAgIGhhdmVCZWVuUHVibGlzaGVkOiBcIiNOQiBub3V2ZWF1eCBncm91cGVzIGRlIHF1aXpzIG9udCDDqXTDqSBwdWJsacOpcy5cIixcbiAgICBpbmZvc0dyb3VwRm9yQWRtaW46IFwiQ2UgZ3JvdXBlIGRlIHF1aXpzIGEgw6l0w6kgY3LDqcOpIGxlIERBVEVfQ1JFQSwgbWlzZSDDoCBqb3VyIGxhIGRlcm5pw6hyZSBmb2lzIGxlIERBVEVfVVBEQVRFLjxicj5Tb24gaWRlbnRpZmlhbnQgZXN0IDxiPkdST1VQX0lEPC9iPi4gSWwgcmVncm91cGUgYWN0dWVsbGVtZW50IGxlcyBxdWVzdGlvbnMgZGUgTkJfRUxFTUVOVFMgcXVpenMuXCIsXG4gICAgbGlua0ZpcnN0RWxlbWVudEdyb3VwOiBcIlJldG91ciBhdSBwcmVtaWVyIGFydGljbGUuXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciBsZSBcIiwgICAgXG4gICAgbmVlZENvcnJlY3RQdWJsaXNoaW5nRGF0ZTogXCJMYSBkYXRlIGRlIHB1YmxpY2F0aW9uIGZvdXJuaWUgbidhIHBhcyB1biBmb3JtYXQgdmFsaWRlLlwiLFxuICAgIG5lZWRMYW5ndWFnZTogXCJWb3VzIGRldmV6IHPDqWxlY3Rpb25uZXIgbGEgbGFuZ3VlIGRlIGNlIGdyb3VwZSBkZSBxdWl6cy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ1RpdGxlOiBcIkxlIHRpdHJlIGR1IGdyb3VwZSBkZSBxdWl6cyBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLCAgICAgICAgICAgICAgICAgXG4gICAgbmVlZFRpdGxlOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gdGl0cmUgw6AgY2UgZ3JvdXBlIGRlIHF1aXpzLlwiLFxuICAgIG5lZWRVbmlxdWVVcmw6IFwiTCd1cmwgZHUgZ3JvdXBlIGRlIHF1aXpzIGRvaXQgw6p0cmUgdW5pcXVlLlwiLFxuICAgIG5lZWRVcmw6IFwiTWVyY2kgZGUgZm91cm5pciBsJ3VybCDDoCBjZSBncm91cGUgZGUgcXVpenMuXCIsXG4gICAgbm90Rm91bmQ6IFwiTGUgZ3JvdXBlIGRlIHF1aXpzICgjU0VBUkNIKSBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgcHVibGlzaGVkQXQ6IFwiIGxlXCIsXG4gICAgcHVibGlzaGVkQnk6IFwiUXVpeiBwdWJsacOpIHBhclwiLFxuICAgIHNlYXJjaElzTm90TG9uZ0Vub3VnaDogXCJWb3VzIGRldmV6IHNhaXNpciBhdSBtb2lucyAjTUlOIGNhcmFjdMOocmVzIHBvdXIgdm90cmUgcmVjaGVyY2hlLlwiLFxuICAgIHNlYXJjaFdpdGhvdXRSZXN1bHQ6IFwiQXVjdW4gZ3JvdXBlIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgdm90cmUgcmVjaGVyY2hlLlwiLFxuICAgIHdyb25nQW5zd2VyVHh0OiBcIk1hdXZhaXNlIHLDqXBvbnNlXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgU0FJU0lSIC8gw4lESVRFUiBMRVMgSU5GT1MgREVTIEdST1VQRVMgREUgUVVJWlNcblxuLy8vIFbDqXJpZmllIHF1ZSBsJ3V0aWxpc2F0ZXVyIGVzdCBiaWVuIGNvbm5lY3TDqSwgYSBsZSBib24gc3RhdHV0IGV0IGxlIHJlZGlyaWdlIHZlcnMgbGUgZm9ybXVsYWlyZSBkJ2luc2NyaXB0aW9uIHNpIGNlIG4nZXN0IHBhcyBsZSBjYXMuXG4vLy8gU2kgYydlc3Qgb2ssIHByb3Bvc2UgdW4gbW90ZXVyIGRlIHJlY2hlcmNoZSBwZXJtZXR0YW50IGRlIGNoZXJjaGVyIHVuIGdyb3VwZS5cbi8vLyBTaSB1biBpZCBlc3QgcGFzc8OpIHBhciBsJ3VybCBvbiBhZmZpY2hlIGxlcyBpbmZvcm1hdGlvbnMgZHUgZ3JvdXBlIGRhbnMgdW4gZm9ybXVsYWlyZSBwZXJtZXR0YW50IGRlIGwnw6lkaXRlci9zdXBwcmltZXIuXG4vLy8gU2kgcGFzIGQnaWQgcGFzc8OpIHBhciBsJ3VybCwgb24gYWZmaWNoZSB1biBmb3JtdWxhaXJlIHZpZGUgcGVybWV0dGFudCBkJ2VuIHNhaXNpciB1biBub3V2ZWF1LlxuXG4vLyBGaWNoaWVycyBkZSBjb25maWd1cmF0aW9uIDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ1F1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy9xdWVzdGlvbm5haXJlcy5qc1wiKTtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBlbXB5Rm9ybSwgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgZGF0ZUZvcm1hdCwgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBhZGRPa01lc3NhZ2UsIHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IGdyb3VwUXVlc3Rpb25uYWlyZXNMaXN0LCBncm91cFF1ZXN0aW9ubmFpcmVzTGlzdFdpdGhvdXQsIGluZm9zR3JvdXBGb3JBZG1pbiwgc2VhcmNoV2l0aG91dFJlc3VsdCB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9ncm91cFwiKTtcbmNvbnN0IHsgbmVlZEJlQ29ubmVjdGVkIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBidG5OZXdHcm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid2FudE5ld0dyb3VwXCIpO1xuY29uc3QgYnRuUHJldmlld0dyb3VwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcmV2aWV3R3JvdXBcIik7XG5jb25zdCBkZWxldGVDaGVja0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsZXRlT2tMYWJlbFwiKTtcbmNvbnN0IGRpdkNyYXNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmFzaFwiKTtcbmNvbnN0IGRpdkdyb3VwSW50cm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdyb3VwSW50cm9cIik7XG5jb25zdCBkaXZNYWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UXVlc3Rpb25uYWlyZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVzTGlzdFwiKTtcbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IGRpdlNlYXJjaFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VhcmNoUmVzdWx0XCIpO1xuY29uc3QgZm9ybUdyb3VwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJncm91cHNcIik7XG5jb25zdCBmb3JtU2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hcIik7XG5cbi8vIEZvbmN0aW9uIHV0aWxlIHBvdXIgdmlkZXIgbGUgZm9ybXVsYWlyZSwgeSBjb21wcmlzIGxlcyBjaGFtcHMgaGlkZGVuLCBldGMuXG5jb25zdCBlbXB0eUdyb3VwRm9ybSA9ICgpID0+XG57XG4gICAgZW1weUZvcm0oZm9ybUdyb3VwKTtcbiAgICAvLyBDYXNlIGRlIHN1cHByZXNzaW9uIGV0IGJvdXRvbiB2aXN1YWxpc2F0aW9uIGludXRpbGVzIGVuIG1vZGUgY3LDqWF0aW9uIDpcbiAgICBkZWxldGVDaGVja0JveC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgIGJ0blByZXZpZXdHcm91cC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiOyAgIFxuICAgIC8vIEludHJvIMOgIHZpZGVyICFcbiAgICBkaXZHcm91cEludHJvLmlubmVySFRNTD1cIlwiO1xufVxuXG4vLyBGb25jdGlvbiBhZmZpY2hhbnQgbGVzIGluZm9zIGNvbm51ZXMgY29uY2VybmFudCB1biBncm91cGUuXG5jb25zdCBzaG93Rm9ybUdyb3VwSW5mb3MgPSAoaWQsIHRva2VuKSA9Plxue1xuICAgIC8vIG9uIGNvbW1lbmNlIHBhciB0b3V0IHZpZGVyLCBkZXMgZm9pcyBxdWUuLi4gOlxuICAgIGVtcHR5R3JvdXBGb3JtKCk7XG4gICAgY29uc3QgeGhyR2V0SW5mb3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHJHZXRJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5ncm91cFJvdXRlcytjb25maWdRdWVzdGlvbm5haXJlcy5nZXRHcm91cFJvdXRlK2lkKTtcbiAgICB4aHJHZXRJbmZvcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLkdyb3VwICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXBUZXh0ID1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIEdST1VQX0lEIDogcmVzcG9uc2UuR3JvdXAuaWQsXG4gICAgICAgICAgICAgICAgICAgIERBVEVfQ1JFQSA6IGRhdGVGb3JtYXQocmVzcG9uc2UuR3JvdXAuY3JlYXRlZEF0KSxcbiAgICAgICAgICAgICAgICAgICAgREFURV9VUERBVEUgOiBkYXRlRm9ybWF0KHJlc3BvbnNlLkdyb3VwLnVwZGF0ZWRBdCksXG4gICAgICAgICAgICAgICAgICAgIE5CX0VMRU1FTlRTIDogKHJlc3BvbnNlLlF1ZXN0aW9ubmFpcmVzIT09dW5kZWZpbmVkKSA/IHJlc3BvbnNlLlF1ZXN0aW9ubmFpcmVzLmxlbmd0aCA6IDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSW50cm89cmVwbGFjZUFsbChpbmZvc0dyb3VwRm9yQWRtaW4sIG1hcFRleHQpO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2R3JvdXBJbnRybywgXCJwXCIsIGdyb3VwSW50cm8sIFwiXCIsIFtcImluZm9cIl0pO1xuICAgICAgICAgICAgICAgIGZvcihsZXQgZGF0YSBpbiByZXNwb25zZS5Hcm91cClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGZvcm1Hcm91cC5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YT09PVwicHVibGlzaGluZ0F0XCIgJiYgcmVzcG9uc2UuR3JvdXBbZGF0YV0hPT1udWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5lbGVtZW50c1tkYXRhXS52YWx1ZT1kYXRlRm9ybWF0KHJlc3BvbnNlLkdyb3VwW2RhdGFdLCBcImZvcm1cIik7Ly8gISEgZm9ybWF0IHBvdXZhbnQgcG9zZXIgc291Y2lzIHNpIG5hdmlnYXRldXIgbmUgZ8OocmUgcGFzIGxlcyBjaGFtcHMgZGUgdHlwZSBcImRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwLmVsZW1lbnRzW2RhdGFdLnZhbHVlPXJlc3BvbnNlLkdyb3VwW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZUNoZWNrQm94LnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgIGJ0blByZXZpZXdHcm91cC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5Hcm91cFtcImlzUHVibGlzaGFibGVcIl0gPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICBidG5QcmV2aWV3R3JvdXAuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMuZ3JvdXBSb3V0ZXMrY29uZmlnUXVlc3Rpb25uYWlyZXMucHJldmlld0dyb3VwUm91dGVzK1wiL1wiK2lkK1wiL1wiK3Rva2VuKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGJ0blByZXZpZXdHcm91cC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIHNpdGVVcmwrXCIvXCIrY29uZmlnUXVlc3Rpb25uYWlyZXMuZGlyV2ViR3JvdXBzK1wiL1wiK3Jlc3BvbnNlLkdyb3VwW1wic2x1Z1wiXStcIi5odG1sXCIpO1xuICAgICAgICAgICAgICAgIC8vIGFmZmljaGFnZSBkZXMgw6lsw6ltZW50cyBkdSBncm91cGUgOlxuICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlF1ZXN0aW9ubmFpcmVzICE9PSB1bmRlZmluZWQgJiYgcmVzcG9uc2UuUXVlc3Rpb25uYWlyZXMubGVuZ3RoICE9PSAwKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RIVE1MPVwiXCIsIG9wdGlvbnNEYXlTdHIgPSB7IHdlZWtkYXk6ICdsb25nJ307XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5RdWVzdGlvbm5haXJlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIjxsaT48YSBocmVmPSdcIitjb25maWdUZW1wbGF0ZS5xdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlK1wiP2lkPVwiK3Jlc3BvbnNlLlF1ZXN0aW9ubmFpcmVzW2ldLlF1ZXN0aW9ubmFpcmUuaWQrXCInIGlkPSdxdWVzdGlvbm5haXJlX1wiK3Jlc3BvbnNlLlF1ZXN0aW9ubmFpcmVzW2ldLlF1ZXN0aW9ubmFpcmUuaWQrXCInPlwiK3Jlc3BvbnNlLlF1ZXN0aW9ubmFpcmVzW2ldLlF1ZXN0aW9ubmFpcmUudGl0bGUrXCI8L2E+PC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuUXVlc3Rpb25uYWlyZXMubGVuZ3RoIT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25uYWlyZXMsIFwiaDNcIiwgZ3JvdXBRdWVzdGlvbm5haXJlc0xpc3QucmVwbGFjZShcIiNOQlwiLCByZXNwb25zZS5RdWVzdGlvbm5haXJlcy5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbm5haXJlcywgXCJoM1wiLCBncm91cFF1ZXN0aW9ubmFpcmVzTGlzdFdpdGhvdXQpOyAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25uYWlyZXMsIFwidWxcIiwgbGlzdEhUTUwsIFwiXCIsIFwiXCIsIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgeGhyR2V0SW5mb3Muc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdG9rZW4pO1xuICAgIHhockdldEluZm9zLnNlbmQoKTtcbn1cblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1wibWFuYWdlclwiLCBcImFkbWluXCJdLCBcIi9cIitjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSwgeyBtZXNzYWdlOiBuZWVkQmVDb25uZWN0ZWQsIGNvbG9yOlwiZXJyb3JcIiB9LCB3aW5kb3cubG9jYXRpb24pO1xuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKTsvLyBsaWVuIFwiQ29tcHRlXCIgbWVudSBoZWFkZXIgdGVtcGxhdGVcbiAgICAgICAgICAgIGRpdk1haW4uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJbml0aWFsaXNhdGlvbiBkZXMgZm9ybXVsYWlyZXMgOlxuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1F1ZXN0aW9ubmFpcmVzLCBmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdRdWVzdGlvbm5haXJlcy5Hcm91cCwgZm9ybUdyb3VwKTtcbiAgICAgICAgICAgIGVtcHR5R3JvdXBGb3JtKCk7XG4gICAgICAgICAgICAvLyBTaSB1biBpZCBlc3QgcGFzc8OpIHBhciBsJ3VybCwgb24gZXNzYXllIGQnYWZmaWNoZXIgbGVzIGluZm9zIDpcbiAgICAgICAgICAgIGxldCB1cmxEYXRhcz1nZXRVcmxQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmKHVybERhdGFzICYmIHVybERhdGFzLmlkIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNob3dGb3JtR3JvdXBJbmZvcyh1cmxEYXRhcy5pZCwgdXNlci50b2tlbik7XG4gICAgICAgICAgICAvLyBCZXNvaW4gZCd1biBjb3VwIGRlIEvDpHJjaGVyID8gXG4gICAgICAgICAgICBidG5OZXdHcm91cC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbXB0eUdyb3VwRm9ybSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBFbnZvaSBkdSBmb3JtdWxhaXJlIHByaW5jaXBhbCA6XG4gICAgICAgICAgICBmb3JtR3JvdXAuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1Hcm91cCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyR3JvdXBEYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSAmJiAoZGF0YXMuZGVsZXRlT2sgIT09IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgICAgIHhockdyb3VwRGF0YXMub3BlbihcIkRFTEVURVwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMuZ3JvdXBSb3V0ZXMrXCIvXCIrZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpKVxuICAgICAgICAgICAgICAgICAgICB4aHJHcm91cERhdGFzLm9wZW4oXCJQVVRcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLmdyb3VwUm91dGVzK1wiL1wiK2RhdGFzLmlkKTsvLyBtaXNlIMOgIGpvdXJcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHhockdyb3VwRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLmdyb3VwUm91dGVzKTsvLyBub3V2ZWwgZW5yZWdpc3RyZW1lbnRcbiAgICAgICAgICAgICAgICB4aHJHcm91cERhdGFzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKSAvLyBub3V2ZWwgZW5yZWdpc3RyZW1lbnQgY3LDqcOpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGFkZE9rTWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMuaWQ9cmVzcG9uc2UuaWQ7IC8vIHV0aWxlIHBvdXIgcsOpYWZmaWNoYWdlICsgYmFzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT0gdW5kZWZpbmVkKSAvLyBtaXNlIMOgIGpvdXIgb3Ugc3VwcHJlc3Npb24gb2tcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzRW1wdHkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhcy5kZWxldGVPayA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybUdyb3VwSW5mb3MoZGF0YXMuaWQsIHVzZXIudG9rZW4pOy8vIGFjdHVhbGlzYXRpb24gZGUgbCdhZmZpY2hhZ2UgYXByw6hzIHRyYWl0ZW1lbnQgc2VydmV1clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlHcm91cEZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJHcm91cERhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgIHhockdyb3VwRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAgICAgIHhockdyb3VwRGF0YXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIEVudm9pIGQndW5lIHJlY2hlcmNoZVxuICAgICAgICAgICAgZm9ybVNlYXJjaC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybVNlYXJjaCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyU2VhcmNoID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5ncm91cFJvdXRlcytjb25maWdRdWVzdGlvbm5haXJlcy5zZWFyY2hHcm91cHNSb3V0ZSk7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJwXCIsIHNlYXJjaFdpdGhvdXRSZXN1bHQsIFwiXCIsIFtcImluZm9cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RIVE1MPVwiPG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0SFRNTCs9XCI8b3B0aW9uIHZhbHVlPSdcIityZXNwb25zZVtpXS5pZCtcIic+XCIrcmVzcG9uc2VbaV0udGl0bGUrXCI8L29wdGlvbj5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwic2VsZWN0XCIsIHNlbGVjdEhUTUwsIFwic2VsZWN0U2VhcmNoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hTZWxlY3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RTZWFyY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2VhcmNoU2VsZWN0LnZhbHVlICE9PSBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtR3JvdXBJbmZvcyhzZWFyY2hTZWxlY3QudmFsdWUsIHVzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSBzZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2Q3Jhc2gsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcbmhlbGxvRGV2KCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIHLDqWN1cMOpcmFudCBsZXMgcGFyYW3DqHRyZXMgcGFzc8OpcyBwYXIgbCd1cmxcbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9Plxue1xuICAgIGlmKGlzRW1wdHkobG9jYXRpb24uc2VhcmNoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoXCImXCIpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpIHx8IHBhcmFtZXRlcnMubGVuZ3RoPT09MClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBcbiAgICBsZXQgcGFyYW0sIGRhdGFzPXt9O1xuICAgIGZvcihsZXQgaSBpbiBwYXJhbWV0ZXJzKVxuICAgIHtcbiAgICAgICAgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYocGFyYW0ubGVuZ3RoPT09MilcbiAgICAgICAgICAgIGRhdGFzW3BhcmFtWzBdXT1kZWNvZGVVUkkocGFyYW1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6IG91IGQndW4gZ3JvdXBlIGRlIHF1aXpzXG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICghaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSB8fCAhaXNFbXB0eShhbnN3ZXIuR3JvdXBJZCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkpXG4gICAgICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGF0YXMuR3JvdXBJZD1hbnN3ZXIuR3JvdXBJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/manageQuestionnaires.app.js b/front/public/JS/manageQuestionnaires.app.js index a08d39f..b0e2cbe 100644 --- a/front/public/JS/manageQuestionnaires.app.js +++ b/front/public/JS/manageQuestionnaires.app.js @@ -766,9 +766,9 @@ module.exports = { correctAnswerTxt: "Bonne réponse", estimatedTime: "Durée de lecture estimée : ", estimatedTimeOption: { - short: "courte", + "short": "courte", medium: "moyenne", - long: "longue" + "long": "longue" }, explanationBeforeTxt: "Extrait :", haveBeenPublished: ":NB nouveaux questionnaires ont été publiés.", @@ -1283,10 +1283,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DU FORMULAIRE PERMETTANT DE SAISIR / ÉDITER LES QUIZS ET LEURS DÉPENDANCES (LIENS, IMAGES, TAGS, ETC.) /// Vérifie que l'utilisateur est bien connecté, a le bon statut et le redirige vers le formulaire d'inscription si ce n'est pas le cas. /// Si c'est ok, propose un moteur de recherche permettant de chercher un quiz @@ -1295,17 +1291,17 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Si pas d'id passé par l'url, on affiche un formulaire vide permettant de saisir un nouveau quiz. // Fichiers de configuration : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var config = __webpack_require__(/*! ../../config/instance.js */ "../config/instance.js"); +const config = __webpack_require__(/*! ../../config/instance.js */ "../config/instance.js"); -var configIllustrations = __webpack_require__(/*! ../../config/illustrations.js */ "../config/illustrations.js"); +const configIllustrations = __webpack_require__(/*! ../../config/illustrations.js */ "../config/illustrations.js"); -var configLinks = __webpack_require__(/*! ../../config/links.js */ "../config/links.js"); +const configLinks = __webpack_require__(/*! ../../config/links.js */ "../config/links.js"); -var configQuestionnaires = __webpack_require__(/*! ../../config/questionnaires.js */ "../config/questionnaires.js"); +const configQuestionnaires = __webpack_require__(/*! ../../config/questionnaires.js */ "../config/questionnaires.js"); -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions : +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions : @@ -1316,65 +1312,71 @@ var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - addOkMessage = _require.addOkMessage, - deleteBtnTxt = _require.deleteBtnTxt, - serverError = _require.serverError, - updateBtnTxt = _require.updateBtnTxt; +const { + addOkMessage, + deleteBtnTxt, + serverError, + updateBtnTxt +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/illustration$")("./" + lang + "/illustration"), - addIllustrationTxt = _require2.addIllustrationTxt, - defaultAlt = _require2.defaultAlt, - introNoIllustration = _require2.introNoIllustration, - introTitleForIllustration = _require2.introTitleForIllustration; +const { + addIllustrationTxt, + defaultAlt, + introNoIllustration, + introTitleForIllustration +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/illustration$")("./" + lang + "/illustration"); -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/link$")("./" + lang + "/link"), - addLinkTxt = _require3.addLinkTxt, - defaultValueForLink = _require3.defaultValueForLink, - introNoLink = _require3.introNoLink, - introTitleForLink = _require3.introTitleForLink; +const { + addLinkTxt, + defaultValueForLink, + introNoLink, + introTitleForLink +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/link$")("./" + lang + "/link"); -var _require4 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/question$")("./" + lang + "/question"), - addQuestionTxt = _require4.addQuestionTxt, - introNoQuestion = _require4.introNoQuestion, - introTitleForQuestion = _require4.introTitleForQuestion; +const { + addQuestionTxt, + introNoQuestion, + introTitleForQuestion +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/question$")("./" + lang + "/question"); -var _require5 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/questionnaire$")("./" + lang + "/questionnaire"), - needGroupIfRank = _require5.needGroupIfRank, - nextDateWithoutQuestionnaire = _require5.nextDateWithoutQuestionnaire, - nextQuestionnairesList = _require5.nextQuestionnairesList, - questionnaireNeedBeCompleted = _require5.questionnaireNeedBeCompleted, - searchQuestionnaireWithNoResult = _require5.searchQuestionnaireWithNoResult; +const { + needGroupIfRank, + nextDateWithoutQuestionnaire, + nextQuestionnairesList, + questionnaireNeedBeCompleted, + searchQuestionnaireWithNoResult +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/questionnaire$")("./" + lang + "/questionnaire"); -var _require6 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - needBeConnected = _require6.needBeConnected; // Principaux éléments du DOM manipulés : +const { + needBeConnected +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); // Principaux éléments du DOM manipulés : -var btnNewQuestionnaire = document.getElementById("wantNewQuestionnaire"); -var btnPreviewQuestionnaire = document.getElementById("previewQuestionnaire"); -var deleteCheckBox = document.getElementById("deleteOkLabel"); -var divCrash = document.getElementById("crash"); -var divIllustrations = document.getElementById("illustrationsList"); -var divLinks = document.getElementById("linksList"); -var divMain = document.getElementById("main-content"); -var divMessage = document.getElementById("message"); -var divQuestionnaires = document.getElementById("questionnairesList"); -var divQuestions = document.getElementById("questionsList"); -var divResponse = document.getElementById("response"); -var divSearchResult = document.getElementById("searchResult"); -var formLink = document.getElementById("links"); -var formIllustration = document.getElementById("illustrations"); -var formQuestion = document.getElementById("questions"); -var formQuestionnaire = document.getElementById("questionnaires"); -var formSearch = document.getElementById("search"); -var helpClassification = document.getElementById("helpClassification"); -var helpGroup = document.getElementById("helpGroup"); -var helpPublishingAt = document.getElementById("helpPublishingAt"); -var inputClassification = document.getElementById("classification"); -var inputGroup = document.getElementById("group"); -var inputRankInGroup = document.getElementById("rankInGroup"); // Vide et cache tous les formulaires annexes au questionnaire : +const btnNewQuestionnaire = document.getElementById("wantNewQuestionnaire"); +const btnPreviewQuestionnaire = document.getElementById("previewQuestionnaire"); +const deleteCheckBox = document.getElementById("deleteOkLabel"); +const divCrash = document.getElementById("crash"); +const divIllustrations = document.getElementById("illustrationsList"); +const divLinks = document.getElementById("linksList"); +const divMain = document.getElementById("main-content"); +const divMessage = document.getElementById("message"); +const divQuestionnaires = document.getElementById("questionnairesList"); +const divQuestions = document.getElementById("questionsList"); +const divResponse = document.getElementById("response"); +const divSearchResult = document.getElementById("searchResult"); +const formLink = document.getElementById("links"); +const formIllustration = document.getElementById("illustrations"); +const formQuestion = document.getElementById("questions"); +const formQuestionnaire = document.getElementById("questionnaires"); +const formSearch = document.getElementById("search"); +const helpClassification = document.getElementById("helpClassification"); +const helpGroup = document.getElementById("helpGroup"); +const helpPublishingAt = document.getElementById("helpPublishingAt"); +const inputClassification = document.getElementById("classification"); +const inputGroup = document.getElementById("group"); +const inputRankInGroup = document.getElementById("rankInGroup"); // Vide et cache tous les formulaires annexes au questionnaire : -var hideAllForms = function hideAllForms() { +const hideAllForms = () => { Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["empyAndHideForm"])(formLink); if (defaultValueForLink != 0) document.getElementById("anchor").value = defaultValueForLink; Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["empyAndHideForm"])(formIllustration); @@ -1382,7 +1384,7 @@ var hideAllForms = function hideAllForms() { }; // Affiche les données d'un lien dans le formulaire adhoc : -var showFormLinkInfos = function showFormLinkInfos(Link) { +const showFormLinkInfos = Link => { // On commence par cacher et vider tous les formulaires annexes hideAllForms(); // Puis on affiche celui concerné @@ -1390,43 +1392,37 @@ var showFormLinkInfos = function showFormLinkInfos(Link) { Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configLinks.Link, formLink); - for (var data in Link) { + for (let data in Link) { if (formLink.elements[data] !== undefined) formLink.elements[data].value = Link[data]; } }; // Affiche les infos connues concernant les liens du questionnaire affiché : -var showLinkInfos = function showLinkInfos(Links, token) { +const showLinkInfos = (Links, token) => { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divLinks, "h2", introTitleForLink); - var listLinks = ""; + let listLinks = ""; - for (var i in Links) { - listLinks += "
  • " + Links[i].anchor + "
    " + updateBtnTxt + " " + deleteBtnTxt + "
  • "; - } + for (let i in Links) listLinks += "
  • " + Links[i].anchor + "
    " + updateBtnTxt + " " + deleteBtnTxt + "
  • "; if (listLinks === "") listLinks = "
  • " + introNoLink + "
  • "; Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divLinks, "ul", listLinks, "", [], "", false); // ! à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite - var _loop = function _loop(_i) { - document.getElementById("#updateLink" + Links[_i].id).addEventListener("click", function (e) { + for (let i in Links) { + document.getElementById("#updateLink" + Links[i].id).addEventListener("click", function (e) { e.preventDefault(); - showFormLinkInfos(Links[_i]); + showFormLinkInfos(Links[i]); window.location.assign("#links"); }); - document.getElementById("#deleteLink" + Links[_i].id).addEventListener("click", function (e) { + document.getElementById("#deleteLink" + Links[i].id).addEventListener("click", function (e) { e.preventDefault(); - showFormLinkInfos(Links[_i]); + showFormLinkInfos(Links[i]); formLink.elements["deleteOk"].value = true; sendLinkForm(token); }); - }; - - for (var _i in Links) { - _loop(_i); } if (Links.length < config.nbLinksMax || config.nbLinksMax === 0) { - var newBtn = "" + addLinkTxt + ""; + let newBtn = "" + addLinkTxt + ""; Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divLinks, "p", newBtn, "", [], {}, false); document.getElementById("newLink").addEventListener("click", function (e) { e.preventDefault(); @@ -1440,16 +1436,16 @@ var showLinkInfos = function showLinkInfos(Links, token) { }; // Envoi des données d'un lien. -var sendLinkForm = function sendLinkForm(token) { - var divResponseLink = document.getElementById("responseLink"); +const sendLinkForm = token => { + const divResponseLink = document.getElementById("responseLink"); divResponseLink.innerHTML = ""; - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formLink); - var xhrLinkDatas = new XMLHttpRequest(); + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formLink); + const xhrLinkDatas = new XMLHttpRequest(); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.deleteOk)) xhrLinkDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configLinks.linksRoute + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrLinkDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configLinks.linksRoute + datas.id);else xhrLinkDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configLinks.linksRoute); xhrLinkDatas.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if ((this.status === 200 || this.status === 201) && response.message != undefined && response.questionnaire != undefined) { if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; @@ -1472,7 +1468,7 @@ var sendLinkForm = function sendLinkForm(token) { }; // Affiche les données d'une illustration dans le formulaire adhoc : -var showFormIllustrationInfos = function showFormIllustrationInfos(Illustration) { +const showFormIllustrationInfos = Illustration => { // On commence par cacher et vider tous les formulaires annexes hideAllForms(); // Puis on affiche celui concerné @@ -1482,43 +1478,37 @@ var showFormIllustrationInfos = function showFormIllustrationInfos(Illustration) formIllustration.elements["image"].removeAttribute("required"); - for (var data in Illustration) { + for (let data in Illustration) { if (formIllustration.elements[data] !== undefined) formIllustration.elements[data].value = Illustration[data]; } }; // Affiche les infos connues concernant les illustrations du questionnaire affiché : -var showIllustrationInfos = function showIllustrationInfos(Illustrations, token) { +const showIllustrationInfos = (Illustrations, token) => { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divIllustrations, "h2", introTitleForIllustration); - var listIllustrations = ""; + let listIllustrations = ""; - for (var i in Illustrations) { - listIllustrations += "
  • " + defaultAlt + "
    " + updateBtnTxt + " " + deleteBtnTxt + "
  • "; - } + for (let i in Illustrations) listIllustrations += "
  • " + defaultAlt + "
    " + updateBtnTxt + " " + deleteBtnTxt + "
  • "; if (listIllustrations === "") listIllustrations = "
  • " + introNoIllustration + "
  • "; Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divIllustrations, "ul", listIllustrations, "", [], "", false); // ! à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite - var _loop2 = function _loop2(_i2) { - document.getElementById("#updateIllustration" + Illustrations[_i2].id).addEventListener("click", function (e) { + for (let i in Illustrations) { + document.getElementById("#updateIllustration" + Illustrations[i].id).addEventListener("click", function (e) { e.preventDefault(); - showFormIllustrationInfos(Illustrations[_i2]); + showFormIllustrationInfos(Illustrations[i]); window.location.assign("#illustrations"); }); - document.getElementById("#deleteIllustration" + Illustrations[_i2].id).addEventListener("click", function (e) { + document.getElementById("#deleteIllustration" + Illustrations[i].id).addEventListener("click", function (e) { e.preventDefault(); - showFormIllustrationInfos(Illustrations[_i2]); + showFormIllustrationInfos(Illustrations[i]); formIllustration.elements["deleteOk"].value = true; sendIllustrationForm(token); }); - }; - - for (var _i2 in Illustrations) { - _loop2(_i2); } if (Illustrations.length < config.nbIllustrationsMax || config.nbIllustrationsMax === 0) { - var newBtn = "" + addIllustrationTxt + ""; + let newBtn = "" + addIllustrationTxt + ""; Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divIllustrations, "p", newBtn, "", [], {}, false); document.getElementById("newIllustration").addEventListener("click", function (e) { e.preventDefault(); @@ -1532,18 +1522,18 @@ var showIllustrationInfos = function showIllustrationInfos(Illustrations, token) }; // Envoi des données d'une illustration. -var sendIllustrationForm = function sendIllustrationForm(token) { - var divResponseIllustration = document.getElementById("responseIllustration"); +const sendIllustrationForm = token => { + const divResponseIllustration = document.getElementById("responseIllustration"); divResponseIllustration.innerHTML = ""; - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formIllustration); - var datasWithFiles = new FormData(formIllustration); // car il me manque les informations du fichier avec la fonction getDatasFromInputs + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formIllustration); + let datasWithFiles = new FormData(formIllustration); // car il me manque les informations du fichier avec la fonction getDatasFromInputs - var xhrIllustrationDatas = new XMLHttpRequest(); + const xhrIllustrationDatas = new XMLHttpRequest(); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.deleteOk)) xhrIllustrationDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configIllustrations.illustrationsRoute + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrIllustrationDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configIllustrations.illustrationsRoute + datas.id);else xhrIllustrationDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configIllustrations.illustrationsRoute); xhrIllustrationDatas.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if ((this.status === 200 || this.status === 201) && response.message != undefined && response.questionnaire != undefined) { if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; @@ -1565,60 +1555,54 @@ var sendIllustrationForm = function sendIllustrationForm(token) { }; // Affiche les données d'une question + ses réponses possibles dans le formulaire adhoc -var showFormQuestionInfos = function showFormQuestionInfos(Question) { +const showFormQuestionInfos = Question => { // On commence par cacher et vider tous les formulaires annexes hideAllForms(); // Puis on affiche celui concerné formQuestion.style.display = "block"; - for (var data in Question.Question) { + for (let data in Question.Question) { if (formQuestion.elements[data] !== undefined) formQuestion.elements[data].value = Question.Question[data]; } // + Les contraintes de champ & les valeurs par défaut Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires.Question, formQuestion); - for (var _data in Question.Choices) { - if (formQuestion.elements["choiceText" + _data] !== undefined) { - formQuestion.elements["choiceText" + _data].value = Question.Choices[_data].text; - if (Question.Choices[_data].isCorrect == true) formQuestion.elements["choiceIsCorrect" + _data].checked = true; - formQuestion.elements["idChoice" + _data].value = Question.Choices[_data].id; + for (let data in Question.Choices) { + if (formQuestion.elements["choiceText" + data] !== undefined) { + formQuestion.elements["choiceText" + data].value = Question.Choices[data].text; + if (Question.Choices[data].isCorrect == true) formQuestion.elements["choiceIsCorrect" + data].checked = true; + formQuestion.elements["idChoice" + data].value = Question.Choices[data].id; } } }; // Affiche les infos des questions du quiz affiché : -var showQuestionInfos = function showQuestionInfos(Questions, token) { +const showQuestionInfos = (Questions, token) => { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestions, "h2", introTitleForQuestion); - var listQuestions = ""; + let listQuestions = ""; - for (var i in Questions) { - listQuestions += "
  • " + Questions[i].Question.rank + " - " + Questions[i].Question.text + "
    " + updateBtnTxt + " " + deleteBtnTxt + "
  • "; - } + for (let i in Questions) listQuestions += "
  • " + Questions[i].Question.rank + " - " + Questions[i].Question.text + "
    " + updateBtnTxt + " " + deleteBtnTxt + "
  • "; if (listQuestions === "") listQuestions = "
  • " + introNoQuestion + "
  • "; Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestions, "ul", listQuestions, "", [], "", false); // à intégrer d'abord dans le DOM pour pouvoir ajouter les Listeners ensuite - var _loop3 = function _loop3(_i3) { - document.getElementById("#updateQuestion" + Questions[_i3].Question.id).addEventListener("click", function (e) { + for (let i in Questions) { + document.getElementById("#updateQuestion" + Questions[i].Question.id).addEventListener("click", function (e) { e.preventDefault(); - showFormQuestionInfos(Questions[_i3]); + showFormQuestionInfos(Questions[i]); window.location.assign("#questions"); }); - document.getElementById("#deleteQuestion" + Questions[_i3].Question.id).addEventListener("click", function (e) { + document.getElementById("#deleteQuestion" + Questions[i].Question.id).addEventListener("click", function (e) { e.preventDefault(); - showFormQuestionInfos(Questions[_i3]); + showFormQuestionInfos(Questions[i]); formQuestion.elements["deleteOk"].value = true; sendQuestionForm(token); }); - }; - - for (var _i3 in Questions) { - _loop3(_i3); } if (Questions.length < config.nbQuestionsMax || config.nbQuestionsMax === 0) { - var newBtn = "" + addQuestionTxt + ""; + let newBtn = "" + addQuestionTxt + ""; Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestions, "p", newBtn, "", [], {}, false); document.getElementById("newQuestion").addEventListener("click", function (e) { e.preventDefault(); @@ -1633,17 +1617,17 @@ var showQuestionInfos = function showQuestionInfos(Questions, token) { }; // Envoi des données d'une question et de ses réponse. Peut être généré par le bouton submit ou par le lien "supprimer". -var sendQuestionForm = function sendQuestionForm(token) { - var divResponseQuestion = document.getElementById("responseQuestion"); +const sendQuestionForm = token => { + const divResponseQuestion = document.getElementById("responseQuestion"); divResponseQuestion.innerHTML = ""; - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formQuestion); - var xhrQuestionDatas = new XMLHttpRequest(); + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formQuestion); + const xhrQuestionDatas = new XMLHttpRequest(); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.deleteOk)) xhrQuestionDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionsRoute + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrQuestionDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionsRoute + datas.id); // mise à jour d'une question else xhrQuestionDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionsRoute); // nouvelle question xhrQuestionDatas.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if ((this.status === 200 || this.status === 201) && response.message != undefined && response.questionnaire != undefined) { if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; @@ -1666,18 +1650,18 @@ var sendQuestionForm = function sendQuestionForm(token) { }; // Affichant les infos connues concernant un questionnaire et ses dépendances -var showFormQuestionnaireInfos = function showFormQuestionnaireInfos(id, token) { - var xhrGetInfos = new XMLHttpRequest(); +const showFormQuestionnaireInfos = (id, token) => { + const xhrGetInfos = new XMLHttpRequest(); xhrGetInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + configQuestionnaires.getQuestionnaireRoutes + "/" + id); xhrGetInfos.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 200 && response.Questionnaire != undefined) { formQuestionnaire.reset(); // pour ne pas garder les données déjà affichées si vide dans ce qui est retourné - for (var data in response.Questionnaire) { + for (let data in response.Questionnaire) { if (formQuestionnaire.elements[data] !== undefined) { if (data === "publishingAt" && response.Questionnaire[data] !== null) formQuestionnaire.elements[data].value = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.Questionnaire[data], "form"); // !! revoir car format pouvant poser soucis si navigateur ne gère pas les champs de type "date" else formQuestionnaire.elements[data].value = response.Questionnaire[data]; @@ -1689,9 +1673,9 @@ var showFormQuestionnaireInfos = function showFormQuestionnaireInfos(id, token) if (response.Tags != undefined) { - var classification = ""; + let classification = ""; - for (var i in response.Tags) { + for (let i in response.Tags) { if (i == 0) classification += response.Tags[i].name;else classification += "," + response.Tags[i].name; } @@ -1719,22 +1703,22 @@ var showFormQuestionnaireInfos = function showFormQuestionnaireInfos(id, token) }; // Affiche les questionnaires bientôt publiés. -var showNextQuestionnaires = function showNextQuestionnaires(token) { - var xhrNextQuestionnaires = new XMLHttpRequest(); +const showNextQuestionnaires = token => { + const xhrNextQuestionnaires = new XMLHttpRequest(); xhrNextQuestionnaires.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + configQuestionnaires.getListNextQuestionnaires); xhrNextQuestionnaires.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 200 && Array.isArray(response.questionnaires)) { - var listHTML = "", + let listHTML = "", dayStr, optionsDayStr = { weekday: 'long' }; - for (var i in response.questionnaires) { + for (let i in response.questionnaires) { dayStr = new Intl.DateTimeFormat(lang, optionsDayStr).format(new Date(response.questionnaires[i].datePublishing)); listHTML += "
  • " + dayStr + " " + Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.questionnaires[i].datePublishing, "fr") + ": " + response.questionnaires[i].title + ""; if (response.questionnaires[i].isPublishable === false) listHTML += " (" + questionnaireNeedBeCompleted + ")
  • "; @@ -1745,8 +1729,8 @@ var showNextQuestionnaires = function showNextQuestionnaires(token) { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(helpPublishingAt, "em", nextDateWithoutQuestionnaire + Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(new Date(response.dateNeeded), "fr")); Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestionnaires, "ul", listHTML, "", "", "", false); - for (var _i4 in response.questionnaires) { - document.getElementById("questionnaire_" + response.questionnaires[_i4].id).addEventListener("click", function (e) { + for (let i in response.questionnaires) { + document.getElementById("questionnaire_" + response.questionnaires[i].id).addEventListener("click", function (e) { e.preventDefault(); showFormQuestionnaireInfos(e.target.id.split("_")[1], token); window.location.assign("#questionnaires"); @@ -1761,244 +1745,207 @@ var showNextQuestionnaires = function showNextQuestionnaires(token) { xhrNextQuestionnaires.send(); }; -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, urlDatas; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["checkSession"])(["manager", "admin"], "/" + configTemplate.connectionPage, { - message: needBeConnected, - color: "error" - }, window.location); +const initialise = async () => { + try { + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["checkSession"])(["manager", "admin"], "/" + configTemplate.connectionPage, { + message: needBeConnected, + color: "error" + }, window.location); - case 3: - isConnected = _context.sent; + if (isConnected) { + divMain.style.display = "block"; - if (isConnected) { - divMain.style.display = "block"; - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); - } - - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); // Mise à jour du lien "compte" du header : - - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); // Initialisation des formulaires : - - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires, formSearch); - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires.Questionnaire, formQuestionnaire); // Vide/cache les éléments inutiles en mode création : - - btnPreviewQuestionnaire.style.display = "none"; - deleteCheckBox.style.display = "none"; - hideAllForms(); // Si un id est passé par l'url, on essaye d'afficher le questionnaire : - - urlDatas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_6__["getUrlParams"])(); - if (urlDatas && urlDatas.id !== undefined) showFormQuestionnaireInfos(urlDatas.id, user.token); // les prochaines publications : - - showNextQuestionnaires(user.token); // Lancement d'une recherche : - - formSearch.addEventListener("submit", function (e) { - e.preventDefault(); - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch); - var xhrSearch = new XMLHttpRequest(); - xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + configQuestionnaires.searchAdminQuestionnairesRoute); - - xhrSearch.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && Array.isArray(response)) { - if (response.length === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", searchQuestionnaireWithNoResult, "", ["info"]);else { - var selectHTML = ""; - - for (var i in response) { - selectHTML += ""; - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "select", selectHTML, "selectSearch"); - var searchSelect = document.getElementById("selectSearch"); - searchSelect.addEventListener("change", function () { - if (searchSelect.value !== "") showFormQuestionnaireInfos(searchSelect.value, user.token); - }); - } - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", serverError, "", ["error"]); - } - }; - - xhrSearch.setRequestHeader("Content-Type", "application/json"); - xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token); - if (datas) xhrSearch.send(JSON.stringify(datas)); - }); // Aide à la saisie pour le classement du quiz - - inputClassification.addEventListener("input", function (e) { - divResponse.innerHTML = ""; - var tags = inputClassification.value.split(","); - tags.reverse(); - var lastTag = tags[0].trim(); - - if (lastTag.length >= 2) { - var xhrSearchTags = new XMLHttpRequest(); - xhrSearchTags.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + configQuestionnaires.tagsSearchRoute); - - xhrSearchTags.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && Array.isArray(response)) { - helpClassification.innerHTML = ""; - - for (var i in response) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(helpClassification, "a", response[i].name, "#tag" + response[i].id, ["info"], { - href: "#tag" + response[i].id - }, false); - document.getElementById("#tag" + response[i].id).addEventListener("click", function (e) { - e.preventDefault(); - tags[0] = e.target.innerHTML; - tags.reverse(); - inputClassification.value = tags.join(","); - helpClassification.innerHTML = ""; - }); - } - } - } - }; - - xhrSearchTags.setRequestHeader("Content-Type", "application/json"); - xhrSearchTags.setRequestHeader("Authorization", "Bearer " + user.token); - xhrSearchTags.send(JSON.stringify({ - search: lastTag - })); - } - }); // Aide à la sélection d'un groupe pour le quiz - - inputGroup.addEventListener("input", function (e) { - formQuestionnaire["GroupId"].value = ""; - var groupInput = inputGroup.value.trim(); - - if (groupInput.length >= configQuestionnaires.searchGroups.minlength) { - var xhrSearchGroups = new XMLHttpRequest(); - xhrSearchGroups.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + configQuestionnaires.searchGroupsRoute); - - xhrSearchGroups.onreadystatechange = function () { - var _this = this; - - if (this.readyState == XMLHttpRequest.DONE) { - (function () { - var response = JSON.parse(_this.responseText); - - if (_this.status === 200 && Array.isArray(response)) { - helpGroup.innerHTML = ""; - - var _loop4 = function _loop4(i) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(helpGroup, "a", response[i].title, "#group" + response[i].id, ["info"], { - href: "#group" + response[i].id - }, false); - document.getElementById("#group" + response[i].id).addEventListener("click", function (e) { - e.preventDefault(); - inputGroup.value = response[i].title + " (" + response[i].id + ")"; - formQuestionnaire["GroupId"].value = response[i].id; - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response[i].maxRank)) inputRankInGroup.value = response[i].maxRank + 1;else inputRankInGroup.value = 1; - helpGroup.innerHTML = ""; - }); - }; - - for (var i in response) { - _loop4(i); - } - } - })(); - } - }; - - xhrSearchGroups.setRequestHeader("Content-Type", "application/json"); - xhrSearchGroups.setRequestHeader("Authorization", "Bearer " + user.token); - xhrSearchGroups.send(JSON.stringify({ - searchGroups: groupInput - })); - } - }); // Traitement de l'envoi du formulaire des infos de base du quiz - - formQuestionnaire.addEventListener("submit", function (e) { - e.preventDefault(); - divResponse.innerHTML = ""; - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formQuestionnaire); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.rankInGroup) && Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.GroupId)) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", needGroupIfRank, "", ["error"]);else { - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.rankInGroup) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.GroupId)) datas.rankInGroup = 1; - var xhrQuestionnaireDatas = new XMLHttpRequest(); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && datas.deleteOk !== undefined) xhrQuestionnaireDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + "/" + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrQuestionnaireDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + "/" + datas.id);else xhrQuestionnaireDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + "/"); - - xhrQuestionnaireDatas.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 201 && response.id != undefined) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", addOkMessage, "", ["success"]); - datas.id = response.id; - showNextQuestionnaires(user.token); // peut avoir évolué suivant ce qui s'est passé - } else if (this.status === 200 && response.message != undefined) { - if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); - showNextQuestionnaires(user.token); // peut avoir évolué suivant ce qui s'est passé - } else if (response.errors) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - - if (datas.deleteOk === undefined && response.errors === undefined) showFormQuestionnaireInfos(datas.id, user.token); // on actualise les données - else if (response.errors === undefined) { - formQuestionnaire.reset(); - divLinks.innerHTML = ""; - divIllustrations.innerHTML = ""; - divQuestions.innerHTML = ""; - } - } - }; - - xhrQuestionnaireDatas.setRequestHeader("Content-Type", "application/json"); - xhrQuestionnaireDatas.setRequestHeader("Authorization", "Bearer " + user.token); - if (datas) xhrQuestionnaireDatas.send(JSON.stringify(datas)); - } - }); - formLink.addEventListener("submit", function (e) { - e.preventDefault(); - sendLinkForm(user.token); - }); - formIllustration.addEventListener("submit", function (e) { - e.preventDefault(); - sendIllustrationForm(user.token); - }); - formQuestion.addEventListener("submit", function (e) { - e.preventDefault(); - sendQuestionForm(user.token); - }); - } - - _context.next = 11; - break; - - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - console.error(_context.t0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); - - case 11: - case "end": - return _context.stop(); - } + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); } - }, _callee, null, [[0, 7]]); - })); - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); // Mise à jour du lien "compte" du header : + + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); // Initialisation des formulaires : + + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires, formSearch); + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configQuestionnaires.Questionnaire, formQuestionnaire); // Vide/cache les éléments inutiles en mode création : + + btnPreviewQuestionnaire.style.display = "none"; + deleteCheckBox.style.display = "none"; + hideAllForms(); // Si un id est passé par l'url, on essaye d'afficher le questionnaire : + + let urlDatas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_6__["getUrlParams"])(); + if (urlDatas && urlDatas.id !== undefined) showFormQuestionnaireInfos(urlDatas.id, user.token); // les prochaines publications : + + showNextQuestionnaires(user.token); // Lancement d'une recherche : + + formSearch.addEventListener("submit", function (e) { + e.preventDefault(); + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch); + const xhrSearch = new XMLHttpRequest(); + xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + configQuestionnaires.searchAdminQuestionnairesRoute); + + xhrSearch.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 200 && Array.isArray(response)) { + if (response.length === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", searchQuestionnaireWithNoResult, "", ["info"]);else { + let selectHTML = ""; + + for (let i in response) selectHTML += ""; + + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "select", selectHTML, "selectSearch"); + const searchSelect = document.getElementById("selectSearch"); + searchSelect.addEventListener("change", function () { + if (searchSelect.value !== "") showFormQuestionnaireInfos(searchSelect.value, user.token); + }); + } + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", serverError, "", ["error"]); + } + }; + + xhrSearch.setRequestHeader("Content-Type", "application/json"); + xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token); + if (datas) xhrSearch.send(JSON.stringify(datas)); + }); // Aide à la saisie pour le classement du quiz + + inputClassification.addEventListener("input", function (e) { + divResponse.innerHTML = ""; + const tags = inputClassification.value.split(","); + tags.reverse(); + const lastTag = tags[0].trim(); + + if (lastTag.length >= 2) { + const xhrSearchTags = new XMLHttpRequest(); + xhrSearchTags.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + configQuestionnaires.tagsSearchRoute); + + xhrSearchTags.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 200 && Array.isArray(response)) { + helpClassification.innerHTML = ""; + + for (let i in response) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(helpClassification, "a", response[i].name, "#tag" + response[i].id, ["info"], { + href: "#tag" + response[i].id + }, false); + document.getElementById("#tag" + response[i].id).addEventListener("click", function (e) { + e.preventDefault(); + tags[0] = e.target.innerHTML; + tags.reverse(); + inputClassification.value = tags.join(","); + helpClassification.innerHTML = ""; + }); + } + } + } + }; + + xhrSearchTags.setRequestHeader("Content-Type", "application/json"); + xhrSearchTags.setRequestHeader("Authorization", "Bearer " + user.token); + xhrSearchTags.send(JSON.stringify({ + search: lastTag + })); + } + }); // Aide à la sélection d'un groupe pour le quiz + + inputGroup.addEventListener("input", function (e) { + formQuestionnaire["GroupId"].value = ""; + const groupInput = inputGroup.value.trim(); + + if (groupInput.length >= configQuestionnaires.searchGroups.minlength) { + const xhrSearchGroups = new XMLHttpRequest(); + xhrSearchGroups.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.groupRoutes + configQuestionnaires.searchGroupsRoute); + + xhrSearchGroups.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 200 && Array.isArray(response)) { + helpGroup.innerHTML = ""; + + for (let i in response) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(helpGroup, "a", response[i].title, "#group" + response[i].id, ["info"], { + href: "#group" + response[i].id + }, false); + document.getElementById("#group" + response[i].id).addEventListener("click", function (e) { + e.preventDefault(); + inputGroup.value = response[i].title + " (" + response[i].id + ")"; + formQuestionnaire["GroupId"].value = response[i].id; + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response[i].maxRank)) inputRankInGroup.value = response[i].maxRank + 1;else inputRankInGroup.value = 1; + helpGroup.innerHTML = ""; + }); + } + } + } + }; + + xhrSearchGroups.setRequestHeader("Content-Type", "application/json"); + xhrSearchGroups.setRequestHeader("Authorization", "Bearer " + user.token); + xhrSearchGroups.send(JSON.stringify({ + searchGroups: groupInput + })); + } + }); // Traitement de l'envoi du formulaire des infos de base du quiz + + formQuestionnaire.addEventListener("submit", function (e) { + e.preventDefault(); + divResponse.innerHTML = ""; + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formQuestionnaire); + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.rankInGroup) && Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.GroupId)) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", needGroupIfRank, "", ["error"]);else { + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.rankInGroup) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.GroupId)) datas.rankInGroup = 1; + const xhrQuestionnaireDatas = new XMLHttpRequest(); + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && datas.deleteOk !== undefined) xhrQuestionnaireDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + "/" + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrQuestionnaireDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + "/" + datas.id);else xhrQuestionnaireDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configQuestionnaires.questionnaireRoutes + "/"); + + xhrQuestionnaireDatas.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 201 && response.id != undefined) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", addOkMessage, "", ["success"]); + datas.id = response.id; + showNextQuestionnaires(user.token); // peut avoir évolué suivant ce qui s'est passé + } else if (this.status === 200 && response.message != undefined) { + if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); + showNextQuestionnaires(user.token); // peut avoir évolué suivant ce qui s'est passé + } else if (response.errors) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + + if (datas.deleteOk === undefined && response.errors === undefined) showFormQuestionnaireInfos(datas.id, user.token); // on actualise les données + else if (response.errors === undefined) { + formQuestionnaire.reset(); + divLinks.innerHTML = ""; + divIllustrations.innerHTML = ""; + divQuestions.innerHTML = ""; + } + } + }; + + xhrQuestionnaireDatas.setRequestHeader("Content-Type", "application/json"); + xhrQuestionnaireDatas.setRequestHeader("Authorization", "Bearer " + user.token); + if (datas) xhrQuestionnaireDatas.send(JSON.stringify(datas)); + } + }); + formLink.addEventListener("submit", function (e) { + e.preventDefault(); + sendLinkForm(user.token); + }); + formIllustration.addEventListener("submit", function (e) { + e.preventDefault(); + sendIllustrationForm(user.token); + }); + formQuestion.addEventListener("submit", function (e) { + e.preventDefault(); + sendQuestionForm(user.token); + }); + } + } catch (e) { + console.error(e); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); + } +}; initialise(); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); @@ -2019,14 +1966,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -2044,32 +1990,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -2093,13 +2028,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -2120,25 +2055,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -2146,49 +2073,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -2209,14 +2114,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); // Fonction récupérant les paramètres passés par l'url -var getUrlParams = function getUrlParams() { +const getUrlParams = () => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); + const parameters = location.search.substring(1).split("&"); if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, + let param, datas = {}; - for (var i in parameters) { + for (let i in parameters) { param = parameters[i].split("="); if (param.length === 2) datas[param[0]] = decodeURI(param[1]); } @@ -2246,27 +2151,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -2275,11 +2176,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -2293,96 +2194,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -2391,4 +2264,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbGx1c3RyYXRpb25zLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9saW5rcy5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL2lsbHVzdHJhdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9saW5rJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9uJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmUkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9pbGx1c3RyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvbGluay5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsiaW5zdGFuY2UiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImlsbHVzdHJhdGlvbnNSb3V0ZSIsIklsbHVzdHJhdGlvbiIsImFsdCIsIm1heGxlbmd0aCIsInRpdGxlIiwiY2FwdGlvbiIsImltYWdlIiwicmVxdWlyZWQiLCJhY2NlcHQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJqb2luIiwiZGlySWxsdXN0cmF0aW9uc1RtcCIsImRpcklsbHVzdHJhdGlvbnMiLCJ1c2VycyIsInF1ZXN0aW9ubmFpcmVzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsImxpbmtzUm91dGUiLCJMaW5rIiwidXJsIiwiYW5jaG9yIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiYWRkQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJiYWRVcmwiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuU2hvd09uV2ViU2l0ZSIsImRlbGV0ZUJ0blR4dCIsImRlbGV0ZUZhaWxNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aENyb24iLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aFRva2VuIiwibmVlZGVkUGFyYW1zIiwibmV4dFBhZ2UiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJub3RWYWxpZEZvcm1hdCIsInByZXZpb3VzUGFnZSIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzY3JpcHRUaW1pbmdJbmZvIiwic3RhdHNBZG1pbiIsInN1YnNjcmlwdGlvbkNhbGwiLCJ1cGRhdGVCdG5UeHQiLCJ1cGRhdGVPa01lc3NhZ2UiLCJhZGRlZE9rTWVzc2FnZSIsImFkZElsbHVzdHJhdGlvblR4dCIsImRlZmF1bHRBbHQiLCJkZWxldGVkT2tNZXNzYWdlIiwiaW50cm9Ob0lsbHVzdHJhdGlvbiIsImludHJvVGl0bGVGb3JJbGx1c3RyYXRpb24iLCJuZWVkR29vZEZpbGUiLCJuZWVkR29vZExvbmdBbHQiLCJuZWVkR29vZExvbmdDYXB0aW9uIiwibmVlZEdvb2RMb25nVGl0bGUiLCJuZWVkR29vZExvbmdVcmwiLCJuZWVkTWF4SWxsdXN0cmF0aW9uc0ZvclF1ZXN0aW9ubmFpcmUiLCJuZWVkUXVlc3Rpb25uYWlyZUZvcklsbHVzdHJhdGlvbiIsIm5lZWRVbmlxdWVVcmwiLCJuZWVkVXJsIiwibm90Rm91bmQiLCJ1cGRhdGVkT2tNZXNzYWdlIiwiYWRkTGlua1R4dCIsImRlZmF1bHRWYWx1ZUZvckxpbmsiLCJpbnRyb05vTGluayIsImludHJvVGl0bGVGb3JMaW5rIiwibmVlZEFuY2hvciIsIm5lZWRHb29kTG9uZ0FuY2hvciIsIm5lZWRNYXhMaW5rc0ZvclF1ZXN0aW9ubmFpcmUiLCJuZWVkTm90VG9vTG9uZ1VybCIsIm5lZWRRdWVzdGlvbm5haXJlIiwibmVlZFZhbGlkVXJsIiwiYWRkUXVlc3Rpb25UeHQiLCJpbnRyb05vUXVlc3Rpb24iLCJpbnRyb1RpdGxlRm9yUXVlc3Rpb24iLCJuZWVkTWF4UXVlc3Rpb25zIiwibmVlZE5vdFRvb0xvbmdUZXh0IiwibmVlZE51bWJlckZvclJhbmsiLCJuZWVkVGV4dCIsImJ0blNlbmRSZXNwb25zZSIsImJ0blNoYXJlUXVpelR4dCIsImJ0blNoYXJlUXVpek1haWxCb2R5IiwiYnRuU2hvd1F1ZXN0aW9ubmFpcmUiLCJjb3JyZWN0QW5zd2VyVHh0IiwiZXN0aW1hdGVkVGltZSIsImVzdGltYXRlZFRpbWVPcHRpb24iLCJzaG9ydCIsIm1lZGl1bSIsImxvbmciLCJleHBsYW5hdGlvbkJlZm9yZVR4dCIsImhhdmVCZWVuUHVibGlzaGVkIiwiaGF2ZUJlZW5SZWdlbmVyYXRlZCIsImxhc3RVcGRhdGVkIiwibGlua0dvVG9OZXh0RWxlbWVudCIsImxpbmtHb1RvUXVpeiIsIm5lZWRDb3JyZWN0UHVibGlzaGluZ0RhdGUiLCJuZWVkRXN0aW1hdGVkVGltZSIsIm5lZWRHcm91cElmUmFuayIsIm5lZWRJbnRyb2R1Y3Rpb24iLCJuZWVkS25vd0lmSXNQdWJsaXNoZWQiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkTm90VG9vTG9uZ1RpdGxlIiwibmVlZFRpdGxlIiwibmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZSIsIm5leHRRdWVzdGlvbm5haXJlc0xpc3QiLCJxdWVzdGlvbm5haXJlc05hbWUiLCJxdWVzdGlvbm5haXJlTmVlZEJlQ29tcGxldGVkIiwicHVibGlzaGVkQXQiLCJwdWJsaXNoZWRCeSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVSZXN1bHRUaXRsZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoTm9SZXN1bHQiLCJzZWFyY2hRdWVzdGlvbm5haXJlV2l0aFJlc3VsdCIsIndyb25nQW5zd2VyVHh0IiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ3ZWxjb21lTWVzc2FnZSIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnIiwiY29uZmlnSWxsdXN0cmF0aW9ucyIsImNvbmZpZ0xpbmtzIiwiY29uZmlnUXVlc3Rpb25uYWlyZXMiLCJjb25maWdUZW1wbGF0ZSIsImJ0bk5ld1F1ZXN0aW9ubmFpcmUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUiLCJkZWxldGVDaGVja0JveCIsImRpdkNyYXNoIiwiZGl2SWxsdXN0cmF0aW9ucyIsImRpdkxpbmtzIiwiZGl2TWFpbiIsImRpdk1lc3NhZ2UiLCJkaXZRdWVzdGlvbm5haXJlcyIsImRpdlF1ZXN0aW9ucyIsImRpdlJlc3BvbnNlIiwiZGl2U2VhcmNoUmVzdWx0IiwiZm9ybUxpbmsiLCJmb3JtSWxsdXN0cmF0aW9uIiwiZm9ybVF1ZXN0aW9uIiwiZm9ybVF1ZXN0aW9ubmFpcmUiLCJmb3JtU2VhcmNoIiwiaGVscENsYXNzaWZpY2F0aW9uIiwiaGVscEdyb3VwIiwiaGVscFB1Ymxpc2hpbmdBdCIsImlucHV0Q2xhc3NpZmljYXRpb24iLCJpbnB1dEdyb3VwIiwiaW5wdXRSYW5rSW5Hcm91cCIsImhpZGVBbGxGb3JtcyIsImVtcHlBbmRIaWRlRm9ybSIsInNob3dGb3JtTGlua0luZm9zIiwic3R5bGUiLCJkaXNwbGF5Iiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiZGF0YSIsImVsZW1lbnRzIiwic2hvd0xpbmtJbmZvcyIsIkxpbmtzIiwidG9rZW4iLCJhZGRFbGVtZW50IiwibGlzdExpbmtzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwic2VuZExpbmtGb3JtIiwibmV3QnRuIiwiZGl2UmVzcG9uc2VMaW5rIiwiaW5uZXJIVE1MIiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJMaW5rRGF0YXMiLCJYTUxIdHRwUmVxdWVzdCIsImRlbGV0ZU9rIiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJzdGF0dXMiLCJtZXNzYWdlIiwicXVlc3Rpb25uYWlyZSIsIkFycmF5IiwiaXNBcnJheSIsInNob3dOZXh0UXVlc3Rpb25uYWlyZXMiLCJlcnJvcnMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsInN0cmluZ2lmeSIsInNob3dGb3JtSWxsdXN0cmF0aW9uSW5mb3MiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzaG93SWxsdXN0cmF0aW9uSW5mb3MiLCJJbGx1c3RyYXRpb25zIiwibGlzdElsbHVzdHJhdGlvbnMiLCJzZW5kSWxsdXN0cmF0aW9uRm9ybSIsImRpdlJlc3BvbnNlSWxsdXN0cmF0aW9uIiwiZGF0YXNXaXRoRmlsZXMiLCJGb3JtRGF0YSIsInhocklsbHVzdHJhdGlvbkRhdGFzIiwic2hvd0Zvcm1RdWVzdGlvbkluZm9zIiwiQ2hvaWNlcyIsImlzQ29ycmVjdCIsImNoZWNrZWQiLCJzaG93UXVlc3Rpb25JbmZvcyIsIlF1ZXN0aW9ucyIsImxpc3RRdWVzdGlvbnMiLCJzZW5kUXVlc3Rpb25Gb3JtIiwiZGl2UmVzcG9uc2VRdWVzdGlvbiIsInhoclF1ZXN0aW9uRGF0YXMiLCJzaG93Rm9ybVF1ZXN0aW9ubmFpcmVJbmZvcyIsInhockdldEluZm9zIiwicmVzZXQiLCJkYXRlRm9ybWF0IiwiVGFncyIsImNsYXNzaWZpY2F0aW9uIiwic2V0QXR0cmlidXRlIiwieGhyTmV4dFF1ZXN0aW9ubmFpcmVzIiwibGlzdEhUTUwiLCJkYXlTdHIiLCJvcHRpb25zRGF5U3RyIiwid2Vla2RheSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsImZvcm1hdCIsImRhdGVQdWJsaXNoaW5nIiwiaXNQdWJsaXNoYWJsZSIsImRhdGVOZWVkZWQiLCJ0YXJnZXQiLCJzcGxpdCIsImluaXRpYWxpc2UiLCJjaGVja1Nlc3Npb24iLCJjb2xvciIsImlzQ29ubmVjdGVkIiwiZ2V0TG9jYWx5IiwicmVtb3ZlTG9jYWx5IiwidXNlciIsInVwZGF0ZUFjY291bnRMaW5rIiwidXJsRGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJ4aHJTZWFyY2giLCJzZWxlY3RIVE1MIiwic2VhcmNoU2VsZWN0IiwidGFncyIsInJldmVyc2UiLCJsYXN0VGFnIiwieGhyU2VhcmNoVGFncyIsImdyb3VwSW5wdXQiLCJ4aHJTZWFyY2hHcm91cHMiLCJtYXhSYW5rIiwicmFua0luR3JvdXAiLCJHcm91cElkIiwieGhyUXVlc3Rpb25uYWlyZURhdGFzIiwiY29uc29sZSIsImVycm9yIiwiaGVsbG9EZXYiLCJzYXZlTG9jYWx5IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwiaW5wdXRzQ29uZiIsIm15Rm9ybSIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsImVudHJpZXMiLCJlbnRyaWUiLCJlbXB5Rm9ybSIsInR5cGUiLCJwYXJhbWV0ZXJzIiwicGFyYW0iLCJkZWNvZGVVUkkiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwibmJRdWVzdGlvbnMiLCJRdWVzdGlvbm5haXJlSWQiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwibm93IiwieGhyIiwib25sb2FkIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIiwib25lcnJvciIsInN0YXR1c1RleHQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMseUNBQUQsQ0FBeEI7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k7QUFDQUMsb0JBQWtCLEVBQUUsZ0JBRnhCO0FBR0k7QUFDQUMsY0FBWSxFQUNaO0FBQ0lDLE9BQUcsRUFBRTtBQUFFQyxlQUFTLEVBQUU7QUFBYixLQURUO0FBRUlDLFNBQUss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QixDQUFaO0FBQ0FFLDZCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBSyxxQkFBRyxDQUFDUSxPQUFKLEdBQWM7QUFBQSwyQkFBTVosTUFBTSxDQUFDSSxHQUFHLENBQUNTLFVBQUwsQ0FBWjtBQUFBLG1CQUFkOztBQUNBVCxxQkFBRyxDQUFDNUgsSUFBSjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFaMkMsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU0rRSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDTixjQUFELEVBQWlCM0gsT0FBakIsRUFBMEI0SCxTQUExQixFQUNyQjtBQUNJLE1BQUcsQ0FBQ25SLDJEQUFPLENBQUN1SixPQUFELENBQVgsRUFDSTJFLG9FQUFVLENBQUMsU0FBRCxFQUFZM0UsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDdkosMkRBQU8sQ0FBQ21SLFNBQUQsQ0FBWCxFQUNJakQsb0VBQVUsQ0FBQyxLQUFELEVBQVFpRCxTQUFSLENBQVY7QUFDSixNQUFHLENBQUNuUiwyREFBTyxDQUFDa1IsY0FBRCxDQUFYLEVBQ0loSixNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCOEksY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9tYW5hZ2VRdWVzdGlvbm5haXJlcy5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9tYW5hZ2VRdWVzdGlvbm5haXJlcy5qc1wiKTtcbiIsImNvbnN0IGluc3RhbmNlID0gcmVxdWlyZShcIi4vaW5zdGFuY2VcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgaWxsdXN0cmF0aW9uc1JvdXRlOiBcIi9pbGx1c3RyYXRpb24vXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgSWxsdXN0cmF0aW9uIDpcbiAgICB7XG4gICAgICAgIGFsdDogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgICAgICBjYXB0aW9uOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgICAgIGltYWdlOiB7IHJlcXVpcmVkOiB0cnVlLCBhY2NlcHQ6IGluc3RhbmNlLm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbi5qb2luKFwiLFwiKSB9XG4gICAgfSxcbiAgICAvLyBmaWxlcyB1cGxvYWQgdGVtcG9yeSBkaXJcbiAgICBkaXJJbGx1c3RyYXRpb25zVG1wIDogXCJ0ZW1wXCIsXG4gICAgZGlySWxsdXN0cmF0aW9uczogXCJmcm9udC9wdWJsaWMvaW1nL3F1aXpzXCJcbn07IiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgbGlua3NSb3V0ZTogXCIvbGluay9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBMaW5rIDpcbiAgICB7XG4gICAgICAgIHVybDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgYW5jaG9yOiB7IG1heGxlbmd0aDogMTUwLCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvaWxsdXN0cmF0aW9uXCI6IFwiLi4vbGFuZy9mci9pbGx1c3RyYXRpb24uanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9pbGx1c3RyYXRpb24kXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2xpbmtcIjogXCIuLi9sYW5nL2ZyL2xpbmsuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9saW5rJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9xdWVzdGlvblwiOiBcIi4uL2xhbmcvZnIvcXVlc3Rpb24uanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9xdWVzdGlvbiRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvcXVlc3Rpb25uYWlyZVwiOiBcIi4uL2xhbmcvZnIvcXVlc3Rpb25uYWlyZS5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3F1ZXN0aW9ubmFpcmUkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRlZE9rTWVzc2FnZTogXCJMJ2lsbHVzdHJhdGlvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGFkZElsbHVzdHJhdGlvblR4dDogXCJBam91dGVyIHVuZSBpbGx1c3RyYXRpb25cIixcbiAgICBkZWZhdWx0QWx0IDogXCJJbGx1c3RyYXRpb24gZHUgcXVpelwiLFxuICAgIGRlbGV0ZWRPa01lc3NhZ2U6IFwiTCdpbGx1c3RyYXRpb24gYSBiaWVuIMOpdMOpIHN1cHByaW3DqWUuXCIsXG4gICAgaW50cm9Ob0lsbHVzdHJhdGlvbiA6IFwiQXVjdW5lIGlsbHVzdHJhdGlvbiBwb3VyIGwnaW5zdGFudC5cIixcbiAgICBpbnRyb1RpdGxlRm9ySWxsdXN0cmF0aW9uIDogXCJJbGx1c3RyYXRpb25zIGR1IHF1aXpcIixcbiAgICBuZWVkR29vZEZpbGUgOiBcIlZvdHJlIGZpY2hpZXIgbidhIHBhcyDDqXTDqSBhY2NlcHTDqS5cIixcbiAgICBuZWVkR29vZExvbmdBbHQgOiBcIkxlIHRleHRlIGRlIGxhIHByb3ByacOpdMOpICdhbHQnIG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEdvb2RMb25nQ2FwdGlvbiA6IFwiTGUgdGV4dGUgZGUgbGEgbMOpZ2VuZGUgZGUgbCdpbWFnZSBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRHb29kTG9uZ1RpdGxlIDogXCJMZSB0ZXh0ZSBkZSBsYSBwcm9wcmnDqXTDqSAndGl0bGUnIG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEdvb2RMb25nVXJsIDogXCJMJ3VybCBkZSBsJ2ltYWdlIGRvaXQgY29udGVuaXIgZW50cmUgNSBldCAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heElsbHVzdHJhdGlvbnNGb3JRdWVzdGlvbm5haXJlIDogXCJWb3VzIGF2ZXogZMOpasOgIGF0dGVpbnQgbGUgbm9tYnJlIG1heGltYWwgZCdpbGx1c3RyYXRpb25zIHBvdXIgY2UgcXVlc3Rpb25uYWlyZS5cIixcbiAgICBuZWVkUXVlc3Rpb25uYWlyZUZvcklsbHVzdHJhdGlvbiA6IFwiVGVudGF0aXZlIGQnYWpvdXQvbWlzZSDDoCBqb3VyL3N1cHByZWVzc2lvbiBkJ3VuZSBpbGx1c3RyYXRpb24gcG91ciB1biBxdWVzdGlvbm5haXJlIG4nYXlhbnQgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZFVuaXF1ZVVybCA6IFwiTCd1cmwgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuZSBhdXRyZSBpbWFnZS5cIixcbiAgICBuZWVkVXJsIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuZSB1cmwgcG91ciBsJ2ltYWdlLlwiLFxuICAgIG5vdEZvdW5kOiBcIkwnZW5yZWdpc3RyZW1lbnQgZGUgbCdpbGx1c3RyYXRpb24gbidhIHBhcyDDqXTDqSB0cm91dsOpIDogXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJMJ2lsbHVzdHJhdGlvbiBhIGJpZW4gw6l0w6kgbW9kaWZpw6llLlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkZWRPa01lc3NhZ2U6IFwiTGUgbGllbiBhIGJpZW4gw6l0w6kgYWpvdXTDqS5cIixcbiAgICBhZGRMaW5rVHh0OiBcIkFqb3V0ZXIgdW4gbGllblwiLFxuICAgIGRlZmF1bHRWYWx1ZUZvckxpbms6IFwiTGlyZSBsJ2FydGljbGUgc3VyIFdpa2lww6lkaWEuXCIsXG4gICAgZGVsZXRlZE9rTWVzc2FnZTogXCJMZSBsaWVuIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgaW50cm9Ob0xpbmsgOiBcIkF1Y3VuIGxpZW4gcG91ciBsJ2luc3RhbnQuXCIsXG4gICAgaW50cm9UaXRsZUZvckxpbmsgOiBcIkxlY3R1cmVzIHByb3Bvc8OpZXNcIixcbiAgICBuZWVkQW5jaG9yIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuZSBhbmNyZSBwb3VyIGNlIGxpZW4uXCIsXG4gICAgbmVlZEdvb2RMb25nQW5jaG9yIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuZSBhbmNyZSBwb3VyIGNlIGxpZW4gY29tcHRhbnQgZW50cmUgNSBldCAxNTAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heExpbmtzRm9yUXVlc3Rpb25uYWlyZSA6IFwiVm91cyBhdmV6IGTDqWrDoCBhdHRlaW50IGxlIG5vbWJyZSBtYXhpbWFsIGRlIGxpZW5zIHBvdXIgY2UgcXVlc3Rpb25uYWlyZS5cIixcbiAgICBuZWVkTm90VG9vTG9uZ1VybCA6IFwiTWVyY2kgZGUgIHNhaXNpciB1biB1cmwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRRdWVzdGlvbm5haXJlIDogXCJMZSBxdWVzdGlvbm5haXJlIGR1IGxpZW4gbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWRVcmwgOiBcIk1lcmNpIGRlICBzYWlzaXIgbCd1cmwgZHUgbGllbi5cIixcbiAgICBuZWVkVmFsaWRVcmwgOiBcIk1lcmNpIGRlICBzYWlzaXIgdW4gdXJsIGF5YW50IHVuIGZvcm1hdCB2YWxpZGUuXCIsXG4gICAgbm90Rm91bmQgOiBcIkwnZW5yZWdpc3RyZW1lbnQgZHUgbGllbiBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJMZSBsaWVuIGEgYmllbiDDqXTDqSBtb2RpZmnDqS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkT2tNZXNzYWdlOiBcIkxhIHF1ZXN0aW9uIGEgYmllbiDDqXTDqSBham91dMOpZS5cIixcbiAgICBhZGRRdWVzdGlvblR4dDogXCJBam91dGVyIHVuZSBxdWVzdGlvblwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMYSBxdWVzdGlvbiBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpZS5cIixcbiAgICBpbnRyb05vUXVlc3Rpb246IFwiQXVjdW5lIHF1ZXN0aW9uIG4nYSDDqXTDqSBzYWlzaWUgcG91ciBsJ2luc3RhbnRcIixcbiAgICBpbnRyb1RpdGxlRm9yUXVlc3Rpb246IFwiTGVzIHF1ZXN0aW9ucyBlbnJlZ2lzdHLDqWVzXCIsXG4gICAgbmVlZE1heFF1ZXN0aW9uczogXCJWb3VzIGF2ZXogZMOpasOgIGF0dGVpbnQgbGUgbm9tYnJlIG1heGltYWwgZGUgcXVlc3Rpb25zIHBvdXIgY2UgcXVlc3Rpb25uYWlyZSA6IFwiLCAgICAgICAgIFxuICAgIG5lZWROb3RUb29Mb25nVGV4dDogXCJMYSBxdWVzdGlvbiBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWROdW1iZXJGb3JSYW5rIDogXCJWb3VzIGRldmV6IGZvdXJuaXIgdW4gbm9tYnJlIHN1cMOpcmlldXIgb3Ugw6lnYWwgw6AgMSBwb3VyIGxlIHJhbmcgZGUgY2V0dGUgcXVlc3Rpb24uXCIsIFxuICAgIG5lZWRRdWVzdGlvbm5haXJlOiBcIkxlIHF1ZXN0aW9ubmFpcmUgY29uY2VybsOpIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkVGV4dDogXCJNZXJjaSBkZSBzYWlzaXIgbGUgdGV4dGUgZGUgbGEgcXVlc3Rpb24gIVwiLCAgIFxuICAgIG5vdEZvdW5kOiBcIkwnZW5yZWdpc3RyZW1lbnQgZGUgbGEgcXVlc3Rpb24gbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZTogXCJMYSBxdWVzdGlvbiBhIGJpZW4gw6l0w6kgbW9kaWZpw6llLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIiwvLyBkw6lwbGFjw6kgZGFucyBnZW5lcmFsLmpzXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLC8vaWRlbVxuICAgIGJ0blNlbmRSZXNwb25zZTogXCJUZXN0ZXogdm9zIHLDqXBvbnNlcy5cIixcbiAgICBidG5TaGFyZVF1aXpUeHQ6IFwiUGFydGFnZXIgdmlhIFwiLFxuICAgIGJ0blNoYXJlUXVpek1haWxCb2R5OiBcIkJvbmpvdXIsJTBBJTBBVm9pY2klMjB1biUyMGxpZW4lMjBpbnRlcm5ldCUyMHF1aSUyMGRldnJhaXQlMjB0J2ludMOpcmVzc2VyIDolMEFcIiwgICAgXG4gICAgYnRuU2hvd1F1ZXN0aW9ubmFpcmU6IFwiUsOpcG9uZHJlIGF1IHF1aXogIVwiLFxuICAgIGNvcnJlY3RBbnN3ZXJUeHQ6IFwiQm9ubmUgcsOpcG9uc2VcIixcbiAgICBlc3RpbWF0ZWRUaW1lOiBcIkR1csOpZSBkZSBsZWN0dXJlIGVzdGltw6llIDogXCIsXG4gICAgZXN0aW1hdGVkVGltZU9wdGlvbiA6XG4gICAge1xuICAgICAgICBzaG9ydDogXCJjb3VydGVcIixcbiAgICAgICAgbWVkaXVtOiBcIm1veWVubmVcIixcbiAgICAgICAgbG9uZzogXCJsb25ndWVcIlxuICAgIH0sXG4gICAgZXhwbGFuYXRpb25CZWZvcmVUeHQ6IFwiRXh0cmFpdCA6XCIsXG4gICAgaGF2ZUJlZW5QdWJsaXNoZWQgOiBcIjpOQiBub3V2ZWF1eCBxdWVzdGlvbm5haXJlcyBvbnQgw6l0w6kgcHVibGnDqXMuXCIsXG4gICAgaGF2ZUJlZW5SZWdlbmVyYXRlZCA6IFwiTGVzIHBhZ2VzIEhUTUwgZGUgI05CMSBxdWVzdGlvbm5haXJlcyBvdSDDqWzDqW1lbnRzIGRlIGdyb3VwZXMsICNOQjIgcXVpenMgZ3JvdXDDqXMgZXQgI05CMyB0aMOobWVzIG9udCDDqXTDqSByZWfDqW7DqXLDqXMuXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciwgbGUgXCIsXG4gICAgbGlua0dvVG9OZXh0RWxlbWVudDogXCJBcnRpY2xlIHN1aXZhbnRcIixcbiAgICBsaW5rR29Ub1F1aXo6IFwiQWNjw6lkZXIgYXUgcXVpelwiLCAgICBcbiAgICBuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlOiBcIkxhIGRhdGUgZGUgcHVibGljYXRpb24gZm91cm5pZSBuJ2EgcGFzIHVuIGZvcm1hdCB2YWxpZGUuXCIsXG4gICAgbmVlZEVzdGltYXRlZFRpbWU6IFwiTWVyY2kgZGUgc8OpbGVjdGlvbm5lciB1bmUgZXN0aW1hdGlvbiBkZSBsYSBkdXLDqWUgZGUgY2UgcXVpei5cIixcbiAgICBuZWVkR3JvdXBJZlJhbms6IFwiVm91cyBhdmV6IHNhaXNpIHVuIHJhbmcgZGUgY2xhc3NlbWVudCwgc2FucyBzw6lsZWN0aW9ubmVyIGxlIGdyb3VwZSBkdSBxdWl6LlwiLFxuICAgIG5lZWRJbnRyb2R1Y3Rpb246IFwiTWVyY2kgZGUgZm91cm5pciB1biB0ZXh0ZSBkJ2ludHJvZHVjdGlvbiDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRLbm93SWZJc1B1Ymxpc2hlZDogXCJJbCBmYXV0IHNhdm9pciBzaSBjZSBxdWl6IGVzdCBwdWJsacOpLlwiLFxuICAgIG5lZWRMYW5ndWFnZTogXCJWb3VzIGRldmV6IHPDqWxlY3Rpb25uZXIgbGEgbGFuZ3VlIGRlIGNlIHF1aXouXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdUaXRsZTogXCJMZSB0aXRyZSBkdSBxdWl6IG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE51bWJlckZvclJhbms6IFwiVm91cyBkZXZleiBzYWlzaXIgdW4gbm9tYnJlIGVudGllciBwb3VyIGxlIHJhbmcgZGUgY2UgcXVlc3Rpb25uYWlyZSBkYW5zIHNvbiBncm91cGUuXCIsICAgICAgICAgICAgICBcbiAgICBuZWVkVGl0bGU6IFwiTWVyY2kgZGUgZm91cm5pciB1biB0aXRyZSDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRVbmlxdWVVcmw6IFwiTCd1cmwgZHUgcXVpeiBkb2l0IMOqdHJlIHVuaXF1ZS5cIixcbiAgICBuZWVkVXJsOiBcIk1lcmNpIGRlIGZvdXJuaXIgbCd1cmwgw6Agdm90cmUgcXVpei5cIixcbiAgICBuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlOiBcIlByb2NoYWluZSBkYXRlIHNhbnMgcXVpeiBwcm9ncmFtbcOpIDogXCIsXG4gICAgbmV4dFF1ZXN0aW9ubmFpcmVzTGlzdDogXCJMZXMgI05CIHByb2NoYWlucyBxdWl6cyBkZXZhbnQgw6p0cmUgcHVibGnDqXNcIixcbiAgICBxdWVzdGlvbm5haXJlc05hbWU6IFwicXVpelwiLFxuICAgIHF1ZXN0aW9ubmFpcmVOZWVkQmVDb21wbGV0ZWQ6IFwiUXVpeiBpbmNvbXBsZXRcIixcbiAgICBwdWJsaXNoZWRBdDogXCIsIGxlXCIsXG4gICAgcHVibGlzaGVkQnk6IFwiUXVpeiBwdWJsacOpIHBhclwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVSZXN1bHRUaXRsZSA6IFwiUsOpc3VsdGF0IHBvdXIgdm90cmUgcmVjaGVyY2hlXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhOb1Jlc3VsdCA6IFwiQXVjdW4gcXVpeiBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIHZvdHJlIHJlY2hlcmNoZS5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlV2l0aFJlc3VsdCA6IFwiSWwgeSBhICNOQiBhcnRpY2xlI1MgY29ycmVzcG9uZGFudCDDoCB2b3RyZSByZWNoZXJjaGUgOlwiLFxuICAgIHdyb25nQW5zd2VyVHh0OiBcIk1hdXZhaXNlIHLDqXBvbnNlXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgU0FJU0lSIC8gw4lESVRFUiBMRVMgUVVJWlMgRVQgTEVVUlMgRMOJUEVOREFOQ0VTIChMSUVOUywgSU1BR0VTLCBUQUdTLCBFVEMuKVxuXG4vLy8gVsOpcmlmaWUgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2UgdmVycyBsZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24gc2kgY2Ugbidlc3QgcGFzIGxlIGNhcy5cbi8vLyBTaSBjJ2VzdCBvaywgcHJvcG9zZSB1biBtb3RldXIgZGUgcmVjaGVyY2hlIHBlcm1ldHRhbnQgZGUgY2hlcmNoZXIgdW4gcXVpelxuLy8vIFNpIHVuIGlkIGVzdCBwYXNzw6kgcGFyIGwndXJsIG9uIGFmZmljaGUgbGVzIGluZm9ybWF0aW9ucyBkdSBxdWl6IGRhbnMgdW4gZm9ybXVsYWlyZSBwZXJtZXR0YW50IGRlIGwnw6lkaXRlci9zdXBwcmltZXIgYXZlYyB1bmUgbGlzdGUgZGVzIMOpbMOpbWVudHMgbGnDqXMgKGxpZW5zLCBpbGx1c3RyYXRpb25zLCBxdWVzdGlvbnMuLi4pIHBvdXZhbnQgZXV4LW3Dqm1lcyDDqnRyZSDDqWRpdMOpcy9zdXBwcmltw6lzLlxuLy8vIFNpIGxlIG5vbWJyZSBtYXggY29uZmlndXLDqSBwb3VyIGNoYWN1biBkZSBzZXMgw6lsw6ltZW50cyBuJ2VzdCBwYXMgYXR0ZWludCwgaWwgZXN0IGF1c3NpIHByb3Bvc8OpIGQnYWpvdXRlciB1biBub3V2ZWwgw6lsw6ltZW50LlxuLy8vIFNpIHBhcyBkJ2lkIHBhc3PDqSBwYXIgbCd1cmwsIG9uIGFmZmljaGUgdW4gZm9ybXVsYWlyZSB2aWRlIHBlcm1ldHRhbnQgZGUgc2Fpc2lyIHVuIG5vdXZlYXUgcXVpei5cblxuLy8gRmljaGllcnMgZGUgY29uZmlndXJhdGlvbiA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWcgPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCIpO1xuY29uc3QgY29uZmlnSWxsdXN0cmF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvaWxsdXN0cmF0aW9ucy5qc1wiKTtcbmNvbnN0IGNvbmZpZ0xpbmtzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy9saW5rcy5qc1wiKTtcbmNvbnN0IGNvbmZpZ1F1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy9xdWVzdGlvbm5haXJlcy5qc1wiKTtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBlbXB5QW5kSGlkZUZvcm0sIGdldERhdGFzRnJvbUlucHV0cywgc2V0QXR0cmlidXRlc1RvSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHsgYWRkT2tNZXNzYWdlLCBkZWxldGVCdG5UeHQsIHNlcnZlckVycm9yLCB1cGRhdGVCdG5UeHQgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHsgYWRkSWxsdXN0cmF0aW9uVHh0LCBkZWZhdWx0QWx0LCBpbnRyb05vSWxsdXN0cmF0aW9uLCBpbnRyb1RpdGxlRm9ySWxsdXN0cmF0aW9uIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2lsbHVzdHJhdGlvblwiKTtcbmNvbnN0IHsgYWRkTGlua1R4dCwgZGVmYXVsdFZhbHVlRm9yTGluaywgaW50cm9Ob0xpbmssIGludHJvVGl0bGVGb3JMaW5rIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2xpbmtcIik7XG5jb25zdCB7IGFkZFF1ZXN0aW9uVHh0LCBpbnRyb05vUXVlc3Rpb24sIGludHJvVGl0bGVGb3JRdWVzdGlvbiB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9xdWVzdGlvblwiKTtcbmNvbnN0IHsgbmVlZEdyb3VwSWZSYW5rLCBuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlLCBuZXh0UXVlc3Rpb25uYWlyZXNMaXN0LCBxdWVzdGlvbm5haXJlTmVlZEJlQ29tcGxldGVkLCBzZWFyY2hRdWVzdGlvbm5haXJlV2l0aE5vUmVzdWx0IH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3F1ZXN0aW9ubmFpcmVcIik7XG5jb25zdCB7IG5lZWRCZUNvbm5lY3RlZCB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgYnRuTmV3UXVlc3Rpb25uYWlyZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid2FudE5ld1F1ZXN0aW9ubmFpcmVcIik7XG5jb25zdCBidG5QcmV2aWV3UXVlc3Rpb25uYWlyZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHJldmlld1F1ZXN0aW9ubmFpcmVcIik7XG5jb25zdCBkZWxldGVDaGVja0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsZXRlT2tMYWJlbFwiKTtcbmNvbnN0IGRpdkNyYXNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmFzaFwiKTtcbmNvbnN0IGRpdklsbHVzdHJhdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlsbHVzdHJhdGlvbnNMaXN0XCIpO1xuY29uc3QgZGl2TGlua3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxpbmtzTGlzdFwiKTtcbmNvbnN0IGRpdk1haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4tY29udGVudFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZRdWVzdGlvbm5haXJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZXNMaXN0XCIpO1xuY29uc3QgZGl2UXVlc3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbnNMaXN0XCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZGl2U2VhcmNoUmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hSZXN1bHRcIik7XG5jb25zdCBmb3JtTGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibGlua3NcIik7XG5jb25zdCBmb3JtSWxsdXN0cmF0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbGx1c3RyYXRpb25zXCIpO1xuY29uc3QgZm9ybVF1ZXN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbnNcIik7XG5jb25zdCBmb3JtUXVlc3Rpb25uYWlyZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZXNcIik7XG5jb25zdCBmb3JtU2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hcIik7XG5jb25zdCBoZWxwQ2xhc3NpZmljYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlbHBDbGFzc2lmaWNhdGlvblwiKTtcbmNvbnN0IGhlbHBHcm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaGVscEdyb3VwXCIpO1xuY29uc3QgaGVscFB1Ymxpc2hpbmdBdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaGVscFB1Ymxpc2hpbmdBdFwiKTtcbmNvbnN0IGlucHV0Q2xhc3NpZmljYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNsYXNzaWZpY2F0aW9uXCIpO1xuY29uc3QgaW5wdXRHcm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZ3JvdXBcIik7XG5jb25zdCBpbnB1dFJhbmtJbkdyb3VwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyYW5rSW5Hcm91cFwiKTtcblxuLy8gVmlkZSBldCBjYWNoZSB0b3VzIGxlcyBmb3JtdWxhaXJlcyBhbm5leGVzIGF1IHF1ZXN0aW9ubmFpcmUgOlxuY29uc3QgaGlkZUFsbEZvcm1zID0gKCkgPT5cbntcbiAgICBlbXB5QW5kSGlkZUZvcm0oZm9ybUxpbmspO1xuICAgIGlmKGRlZmF1bHRWYWx1ZUZvckxpbmshPTApXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYW5jaG9yXCIpLnZhbHVlPWRlZmF1bHRWYWx1ZUZvckxpbms7XG4gICAgZW1weUFuZEhpZGVGb3JtKGZvcm1JbGx1c3RyYXRpb24pO1xuICAgIGVtcHlBbmRIaWRlRm9ybShmb3JtUXVlc3Rpb24pO1xufVxuXG4vLyBBZmZpY2hlIGxlcyBkb25uw6llcyBkJ3VuIGxpZW4gZGFucyBsZSBmb3JtdWxhaXJlIGFkaG9jIDpcbmNvbnN0IHNob3dGb3JtTGlua0luZm9zID0gKExpbmspID0+XG57XG4gICAgLy8gT24gY29tbWVuY2UgcGFyIGNhY2hlciBldCB2aWRlciB0b3VzIGxlcyBmb3JtdWxhaXJlcyBhbm5leGVzXG4gICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgLy8gUHVpcyBvbiBhZmZpY2hlIGNlbHVpIGNvbmNlcm7DqVxuICAgIGZvcm1MaW5rLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgIC8vICsgTGVzIGNvbnRyYWludGVzIGRlIGNoYW1wICYgdmFsZXVycyBwYXIgZMOpZmF1dCA6XG4gICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ0xpbmtzLkxpbmssIGZvcm1MaW5rKTtcbiAgICBmb3IobGV0IGRhdGEgaW4gTGluaylcbiAgICB7XG4gICAgICAgIGlmKGZvcm1MaW5rLmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgZm9ybUxpbmsuZWxlbWVudHNbZGF0YV0udmFsdWU9TGlua1tkYXRhXTtcbiAgICB9XG59XG5cbi8vIEFmZmljaGUgbGVzIGluZm9zIGNvbm51ZXMgY29uY2VybmFudCBsZXMgbGllbnMgZHUgcXVlc3Rpb25uYWlyZSBhZmZpY2jDqSA6XG5jb25zdCBzaG93TGlua0luZm9zID0gKExpbmtzLCB0b2tlbikgPT5cbntcbiAgICBhZGRFbGVtZW50KGRpdkxpbmtzLCBcImgyXCIsIGludHJvVGl0bGVGb3JMaW5rKTtcbiAgICBsZXQgbGlzdExpbmtzPVwiXCI7XG4gICAgZm9yKGxldCBpIGluIExpbmtzKVxuICAgICAgICBsaXN0TGlua3MrPVwiPGxpPjxhIGhyZWY9J1wiK0xpbmtzW2ldLnVybCtcIicgdGFyZ2V0PSdfYmxhbmsnPlwiK0xpbmtzW2ldLmFuY2hvcitcIjwvYT48YnI+PGEgaHJlZj0nI3VwZGF0ZUxpbmtcIitMaW5rc1tpXS5pZCtcIicgaWQ9JyN1cGRhdGVMaW5rXCIrTGlua3NbaV0uaWQrXCInIGNsYXNzPSdidXR0b24nID5cIit1cGRhdGVCdG5UeHQrXCI8L2E+IDxhIGhyZWY9JyNkZWxldGVMaW5rXCIrTGlua3NbaV0uaWQrXCInIGlkPScjZGVsZXRlTGlua1wiK0xpbmtzW2ldLmlkK1wiJyBjbGFzcz0nYnV0dG9uJyA+XCIrZGVsZXRlQnRuVHh0K1wiPC9hPjwvbGk+XCI7XG4gICAgaWYobGlzdExpbmtzPT09XCJcIilcbiAgICAgICAgbGlzdExpbmtzPVwiPGxpPlwiK2ludHJvTm9MaW5rK1wiPC9saT5cIjtcbiAgICBhZGRFbGVtZW50KGRpdkxpbmtzLCBcInVsXCIsIGxpc3RMaW5rcywgXCJcIiwgW10sIFwiXCIsIGZhbHNlKTsvLyAhIMOgIGludMOpZ3JlciBkJ2Fib3JkIGRhbnMgbGUgRE9NIHBvdXIgcG91dm9pciBham91dGVyIGxlcyBMaXN0ZW5lcnMgZW5zdWl0ZVxuICAgIGZvcihsZXQgaSBpbiBMaW5rcylcbiAgICB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI3VwZGF0ZUxpbmtcIitMaW5rc1tpXS5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNob3dGb3JtTGlua0luZm9zKExpbmtzW2ldKTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjbGlua3NcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiNkZWxldGVMaW5rXCIrTGlua3NbaV0uaWQpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBzaG93Rm9ybUxpbmtJbmZvcyhMaW5rc1tpXSk7XG4gICAgICAgICAgICBmb3JtTGluay5lbGVtZW50c1tcImRlbGV0ZU9rXCJdLnZhbHVlPXRydWU7XG4gICAgICAgICAgICBzZW5kTGlua0Zvcm0odG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYoTGlua3MubGVuZ3RoIDwgY29uZmlnLm5iTGlua3NNYXggfHwgY29uZmlnLm5iTGlua3NNYXggPT09IDApXG4gICAge1xuICAgICAgICBsZXQgbmV3QnRuPVwiPGEgaHJlZj0nI25ld0xpbmsnIGlkPSduZXdMaW5rJyBjbGFzcz0nYnV0dG9uJz5cIithZGRMaW5rVHh0K1wiPC9hPlwiO1xuICAgICAgICBhZGRFbGVtZW50KGRpdkxpbmtzLCBcInBcIiwgbmV3QnRuLCBcIlwiLCBbXSwgeyB9LCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmV3TGlua1wiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgICAgICAgICBmb3JtTGluay5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGZvcm1MaW5rLmVsZW1lbnRzW1wiUXVlc3Rpb25uYWlyZUlkXCJdLnZhbHVlPWZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW1wiaWRcIl0udmFsdWU7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI2xpbmtzXCIpO1xuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ0xpbmtzLCBmb3JtTGluayk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLy8gRW52b2kgZGVzIGRvbm7DqWVzIGQndW4gbGllbi5cbmNvbnN0IHNlbmRMaW5rRm9ybSA9ICh0b2tlbikgPT5cbntcbiAgICBjb25zdCBkaXZSZXNwb25zZUxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZUxpbmtcIik7XG4gICAgZGl2UmVzcG9uc2VMaW5rLmlubmVySFRNTD1cIlwiO1xuICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybUxpbmspO1xuICAgIGNvbnN0IHhockxpbmtEYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSAmJiAoIWlzRW1wdHkoZGF0YXMuZGVsZXRlT2spKSlcbiAgICAgICAgeGhyTGlua0RhdGFzLm9wZW4oXCJERUxFVEVcIiwgYXBpVXJsK2NvbmZpZ0xpbmtzLmxpbmtzUm91dGUrZGF0YXMuaWQpO1xuICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpKVxuICAgICAgICB4aHJMaW5rRGF0YXMub3BlbihcIlBVVFwiLCBhcGlVcmwrY29uZmlnTGlua3MubGlua3NSb3V0ZStkYXRhcy5pZCk7XG4gICAgZWxzZVxuICAgICAgICB4aHJMaW5rRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ0xpbmtzLmxpbmtzUm91dGUpO1xuICAgIHhockxpbmtEYXRhcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gMjAxKSAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQgJiYgcmVzcG9uc2UucXVlc3Rpb25uYWlyZSE9dW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgc2hvd0xpbmtJbmZvcyhyZXNwb25zZS5xdWVzdGlvbm5haXJlLkxpbmtzLCB0b2tlbik7Ly8gbGUgc2VydmV1ciByZXRvdXJuZSB1bmUgdmVyc2lvbiBhY3R1YWxpc8OpZSBkZSBsYSBsaXN0ZSBkZXMgbGllbnNcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdkxpbmtzLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjbGlua3NMaXN0XCIpO1xuICAgICAgICAgICAgICAgIHNob3dOZXh0UXVlc3Rpb25uYWlyZXModG9rZW4pOy8vIHBldXQgYXZvaXIgw6l2b2x1w6kgc3VpdmFudCBjZSBxdWkgcydlc3QgcGFzc8OpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSBzZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlTGluaywgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2VMaW5rLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB4aHJMaW5rRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgeGhyTGlua0RhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3Rva2VuKTtcbiAgICB4aHJMaW5rRGF0YXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xufVxuXG4vLyBBZmZpY2hlIGxlcyBkb25uw6llcyBkJ3VuZSBpbGx1c3RyYXRpb24gZGFucyBsZSBmb3JtdWxhaXJlIGFkaG9jIDpcbmNvbnN0IHNob3dGb3JtSWxsdXN0cmF0aW9uSW5mb3MgPSAoSWxsdXN0cmF0aW9uKSA9Plxue1xuICAgIC8vIE9uIGNvbW1lbmNlIHBhciBjYWNoZXIgZXQgdmlkZXIgdG91cyBsZXMgZm9ybXVsYWlyZXMgYW5uZXhlc1xuICAgIGhpZGVBbGxGb3JtcygpO1xuICAgIC8vIFB1aXMgb24gYWZmaWNoZSBjZWx1aSBjb25jZXJuw6lcbiAgICBmb3JtSWxsdXN0cmF0aW9uLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgIC8vICsgTGVzIGNvbnRyYWludGVzIGRlIGNoYW1wICYgdmFsZXVycyBwYXIgZMOpZmF1dFxuICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdJbGx1c3RyYXRpb25zLklsbHVzdHJhdGlvbiwgZm9ybUlsbHVzdHJhdGlvbik7ICAgICAgICAgICAgICBcbiAgICAvLyBNYWlzIGxlIGNoYW1wIGZpbGUgbidlc3QgcGx1cyByZXF1aXMsIHF1YW5kIHVuIGZpY2hpZXIgZXhpc3RlIGTDqWrDoFxuICAgIGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbXCJpbWFnZVwiXS5yZW1vdmVBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiKTtcbiAgICBmb3IobGV0IGRhdGEgaW4gSWxsdXN0cmF0aW9uKVxuICAgIHtcbiAgICAgICAgaWYoZm9ybUlsbHVzdHJhdGlvbi5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbZGF0YV0udmFsdWU9SWxsdXN0cmF0aW9uW2RhdGFdO1xuICAgIH1cbn1cblxuLy8gQWZmaWNoZSBsZXMgaW5mb3MgY29ubnVlcyBjb25jZXJuYW50IGxlcyBpbGx1c3RyYXRpb25zIGR1IHF1ZXN0aW9ubmFpcmUgYWZmaWNow6kgOlxuY29uc3Qgc2hvd0lsbHVzdHJhdGlvbkluZm9zID0gKElsbHVzdHJhdGlvbnMsIHRva2VuKSA9Plxue1xuICAgIGFkZEVsZW1lbnQoZGl2SWxsdXN0cmF0aW9ucywgXCJoMlwiLCBpbnRyb1RpdGxlRm9ySWxsdXN0cmF0aW9uKTtcbiAgICBsZXQgbGlzdElsbHVzdHJhdGlvbnM9XCJcIjtcbiAgICBmb3IobGV0IGkgaW4gSWxsdXN0cmF0aW9ucylcbiAgICAgICAgbGlzdElsbHVzdHJhdGlvbnMrPVwiPGxpPjxhIGhyZWY9J1wiK2NvbmZpZ1RlbXBsYXRlLmlsbHVzdHJhdGlvbkRpcitJbGx1c3RyYXRpb25zW2ldLnVybCtcIicgdGFyZ2V0PSdfYmxhbmsnPjxpbWcgc3JjPSdcIitjb25maWdUZW1wbGF0ZS5pbGx1c3RyYXRpb25EaXIrSWxsdXN0cmF0aW9uc1tpXS51cmwrXCInIGFsdD0nXCIrZGVmYXVsdEFsdCtcIicgc3R5bGU9J21heC1oZWlnaHQ6MTUwcHgnPjwvYT48YnI+PGEgaHJlZj0nI3VwZGF0ZUlsbHVzdHJhdGlvblwiK0lsbHVzdHJhdGlvbnNbaV0uaWQrXCInIGlkPScjdXBkYXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCtcIicgY2xhc3M9J2J1dHRvbic+XCIrdXBkYXRlQnRuVHh0K1wiPC9hPiA8YSBocmVmPScjZGVsZXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCtcIicgaWQ9JyNkZWxldGVJbGx1c3RyYXRpb25cIitJbGx1c3RyYXRpb25zW2ldLmlkK1wiJyBjbGFzcz0nYnV0dG9uJz5cIitkZWxldGVCdG5UeHQrXCI8L2E+PC9saT5cIjtcbiAgICBpZihsaXN0SWxsdXN0cmF0aW9ucyA9PT0gXCJcIilcbiAgICAgICAgbGlzdElsbHVzdHJhdGlvbnM9XCI8bGk+XCIraW50cm9Ob0lsbHVzdHJhdGlvbitcIjwvbGk+XCI7XG4gICAgYWRkRWxlbWVudChkaXZJbGx1c3RyYXRpb25zLCBcInVsXCIsIGxpc3RJbGx1c3RyYXRpb25zLCBcIlwiLCBbXSwgXCJcIiwgZmFsc2UpOy8vICEgw6AgaW50w6lncmVyIGQnYWJvcmQgZGFucyBsZSBET00gcG91ciBwb3V2b2lyIGFqb3V0ZXIgbGVzIExpc3RlbmVycyBlbnN1aXRlXG4gICAgZm9yKGxldCBpIGluIElsbHVzdHJhdGlvbnMpXG4gICAge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiN1cGRhdGVJbGx1c3RyYXRpb25cIitJbGx1c3RyYXRpb25zW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgc2hvd0Zvcm1JbGx1c3RyYXRpb25JbmZvcyhJbGx1c3RyYXRpb25zW2ldKTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjaWxsdXN0cmF0aW9uc1wiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI2RlbGV0ZUlsbHVzdHJhdGlvblwiK0lsbHVzdHJhdGlvbnNbaV0uaWQpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBzaG93Rm9ybUlsbHVzdHJhdGlvbkluZm9zKElsbHVzdHJhdGlvbnNbaV0pO1xuICAgICAgICAgICAgZm9ybUlsbHVzdHJhdGlvbi5lbGVtZW50c1tcImRlbGV0ZU9rXCJdLnZhbHVlPXRydWU7XG4gICAgICAgICAgICBzZW5kSWxsdXN0cmF0aW9uRm9ybSh0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZihJbGx1c3RyYXRpb25zLmxlbmd0aCA8IGNvbmZpZy5uYklsbHVzdHJhdGlvbnNNYXggfHwgY29uZmlnLm5iSWxsdXN0cmF0aW9uc01heCA9PT0gMClcbiAgICB7XG4gICAgICAgIGxldCBuZXdCdG49XCI8YSBocmVmPScjbmV3SWxsdXN0cmF0aW9uJyBpZD0nbmV3SWxsdXN0cmF0aW9uJyBjbGFzcz0nYnV0dG9uJz5cIithZGRJbGx1c3RyYXRpb25UeHQrXCI8L2E+XCI7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2SWxsdXN0cmF0aW9ucywgXCJwXCIsIG5ld0J0biwgXCJcIiwgW10sIHsgfSwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5ld0lsbHVzdHJhdGlvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgICAgICAgICBmb3JtSWxsdXN0cmF0aW9uLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgZm9ybUlsbHVzdHJhdGlvbi5lbGVtZW50c1tcIlF1ZXN0aW9ubmFpcmVJZFwiXS52YWx1ZT1mb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tcImlkXCJdLnZhbHVlO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNpbGx1c3RyYXRpb25zXCIpO1xuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ0lsbHVzdHJhdGlvbnMsIGZvcm1JbGx1c3RyYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIEVudm9pIGRlcyBkb25uw6llcyBkJ3VuZSBpbGx1c3RyYXRpb24uXG5jb25zdCBzZW5kSWxsdXN0cmF0aW9uRm9ybSA9ICh0b2tlbikgPT5cbntcbiAgICBjb25zdCBkaXZSZXNwb25zZUlsbHVzdHJhdGlvbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlSWxsdXN0cmF0aW9uXCIpO1xuICAgIGRpdlJlc3BvbnNlSWxsdXN0cmF0aW9uLmlubmVySFRNTD1cIlwiO1xuICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybUlsbHVzdHJhdGlvbik7XG4gICAgbGV0IGRhdGFzV2l0aEZpbGVzPW5ldyBGb3JtRGF0YShmb3JtSWxsdXN0cmF0aW9uKTsgLy8gY2FyIGlsIG1lIG1hbnF1ZSBsZXMgaW5mb3JtYXRpb25zIGR1IGZpY2hpZXIgYXZlYyBsYSBmb25jdGlvbiBnZXREYXRhc0Zyb21JbnB1dHNcbiAgICBjb25zdCB4aHJJbGx1c3RyYXRpb25EYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSAmJiAoIWlzRW1wdHkoZGF0YXMuZGVsZXRlT2spKSlcbiAgICAgICAgeGhySWxsdXN0cmF0aW9uRGF0YXMub3BlbihcIkRFTEVURVwiLCBhcGlVcmwrY29uZmlnSWxsdXN0cmF0aW9ucy5pbGx1c3RyYXRpb25zUm91dGUrZGF0YXMuaWQpO1xuICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpKVxuICAgICAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWdJbGx1c3RyYXRpb25zLmlsbHVzdHJhdGlvbnNSb3V0ZStkYXRhcy5pZCk7XG4gICAgZWxzZVxuICAgICAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnSWxsdXN0cmF0aW9ucy5pbGx1c3RyYXRpb25zUm91dGUpO1xuICAgIHhocklsbHVzdHJhdGlvbkRhdGFzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKCh0aGlzLnN0YXR1cyA9PT0gMjAwIHx8IHRoaXMuc3RhdHVzID09PSAyMDEpICYmIHJlc3BvbnNlLm1lc3NhZ2UhPXVuZGVmaW5lZCAmJiByZXNwb25zZS5xdWVzdGlvbm5haXJlIT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICBzaG93SWxsdXN0cmF0aW9uSW5mb3MocmVzcG9uc2UucXVlc3Rpb25uYWlyZS5JbGx1c3RyYXRpb25zLCB0b2tlbik7Ly8gbGUgc2VydmV1ciByZXRvdXJuZSB1bmUgdmVyc2lvbiBhY3R1YWxpc8OpZSBkZSBsYSBsaXN0ZSBkZXMgbGllbnNcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdklsbHVzdHJhdGlvbnMsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNpbGx1c3RyYXRpb25zTGlzdFwiKTtcbiAgICAgICAgICAgICAgICBzaG93TmV4dFF1ZXN0aW9ubmFpcmVzKHRva2VuKTsvLyBwZXV0IGF2b2lyIMOpdm9sdcOpIHN1aXZhbnQgY2UgcXVpIHMnZXN0IHBhc3PDqVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZUlsbHVzdHJhdGlvbiwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2VJbGx1c3RyYXRpb24sIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHhocklsbHVzdHJhdGlvbkRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3Rva2VuKTtcbiAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5zZW5kKGRhdGFzV2l0aEZpbGVzKTtcbn1cblxuLy8gQWZmaWNoZSBsZXMgZG9ubsOpZXMgZCd1bmUgcXVlc3Rpb24gKyBzZXMgcsOpcG9uc2VzIHBvc3NpYmxlcyBkYW5zIGxlIGZvcm11bGFpcmUgYWRob2NcbmNvbnN0IHNob3dGb3JtUXVlc3Rpb25JbmZvcyA9IChRdWVzdGlvbikgPT5cbntcbiAgICAvLyBPbiBjb21tZW5jZSBwYXIgY2FjaGVyIGV0IHZpZGVyIHRvdXMgbGVzIGZvcm11bGFpcmVzIGFubmV4ZXNcbiAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAvLyBQdWlzIG9uIGFmZmljaGUgY2VsdWkgY29uY2VybsOpXG4gICAgZm9ybVF1ZXN0aW9uLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgIGZvcihsZXQgZGF0YSBpbiBRdWVzdGlvbi5RdWVzdGlvbilcbiAgICB7XG4gICAgICAgIGlmKGZvcm1RdWVzdGlvbi5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIGZvcm1RdWVzdGlvbi5lbGVtZW50c1tkYXRhXS52YWx1ZT1RdWVzdGlvbi5RdWVzdGlvbltkYXRhXTtcbiAgICB9XG4gICAgLy8gKyBMZXMgY29udHJhaW50ZXMgZGUgY2hhbXAgJiBsZXMgdmFsZXVycyBwYXIgZMOpZmF1dFxuICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdRdWVzdGlvbm5haXJlcy5RdWVzdGlvbiwgZm9ybVF1ZXN0aW9uKTsgICAgICAgICAgICAgIFxuICAgIGZvcihsZXQgZGF0YSBpbiBRdWVzdGlvbi5DaG9pY2VzKVxuICAgIHtcbiAgICAgICAgaWYoZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiY2hvaWNlVGV4dFwiK2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbXCJjaG9pY2VUZXh0XCIrZGF0YV0udmFsdWU9UXVlc3Rpb24uQ2hvaWNlc1tkYXRhXS50ZXh0O1xuICAgICAgICAgICAgaWYoUXVlc3Rpb24uQ2hvaWNlc1tkYXRhXS5pc0NvcnJlY3Q9PXRydWUpXG4gICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiY2hvaWNlSXNDb3JyZWN0XCIrZGF0YV0uY2hlY2tlZD10cnVlO1xuICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiaWRDaG9pY2VcIitkYXRhXS52YWx1ZT1RdWVzdGlvbi5DaG9pY2VzW2RhdGFdLmlkO1xuICAgICAgICB9ICAgICAgICAgICAgICAgIFxuICAgIH1cbn1cblxuLy8gQWZmaWNoZSBsZXMgaW5mb3MgZGVzIHF1ZXN0aW9ucyBkdSBxdWl6IGFmZmljaMOpIDpcbmNvbnN0IHNob3dRdWVzdGlvbkluZm9zID0gKFF1ZXN0aW9ucywgdG9rZW4pID0+XG57XG4gICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbnMsIFwiaDJcIiwgaW50cm9UaXRsZUZvclF1ZXN0aW9uKTtcbiAgICBsZXQgbGlzdFF1ZXN0aW9ucz1cIlwiO1xuICAgIGZvcihsZXQgaSBpbiBRdWVzdGlvbnMpXG4gICAgICAgIGxpc3RRdWVzdGlvbnMrPVwiPGxpPlwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5yYW5rK1wiIC0gXCIrUXVlc3Rpb25zW2ldLlF1ZXN0aW9uLnRleHQrXCI8YnI+PGEgaHJlZj0nI3VwZGF0ZVF1ZXN0aW9uXCIrUXVlc3Rpb25zW2ldLlF1ZXN0aW9uLmlkK1wiJyBpZD0nI3VwZGF0ZVF1ZXN0aW9uXCIrUXVlc3Rpb25zW2ldLlF1ZXN0aW9uLmlkK1wiJyBjbGFzcz0nYnV0dG9uJz5cIit1cGRhdGVCdG5UeHQrXCI8L2E+IDxhIGhyZWY9JyNkZWxldGVRdWVzdGlvblwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5pZCtcIicgaWQ9JyNkZWxldGVRdWVzdGlvblwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5pZCtcIicgY2xhc3M9J2J1dHRvbic+XCIrZGVsZXRlQnRuVHh0K1wiPC9hPjwvbGk+XCI7XG4gICAgaWYobGlzdFF1ZXN0aW9ucyA9PT0gXCJcIilcbiAgICAgICAgbGlzdFF1ZXN0aW9ucz1cIjxsaT5cIitpbnRyb05vUXVlc3Rpb24rXCI8L2xpPlwiO1xuICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25zLCBcInVsXCIsIGxpc3RRdWVzdGlvbnMsIFwiXCIsIFtdLCBcIlwiLCBmYWxzZSk7Ly8gw6AgaW50w6lncmVyIGQnYWJvcmQgZGFucyBsZSBET00gcG91ciBwb3V2b2lyIGFqb3V0ZXIgbGVzIExpc3RlbmVycyBlbnN1aXRlXG4gICAgZm9yKGxldCBpIGluIFF1ZXN0aW9ucylcbiAgICB7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI3VwZGF0ZVF1ZXN0aW9uXCIrUXVlc3Rpb25zW2ldLlF1ZXN0aW9uLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbkluZm9zKFF1ZXN0aW9uc1tpXSk7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3F1ZXN0aW9uc1wiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI2RlbGV0ZVF1ZXN0aW9uXCIrUXVlc3Rpb25zW2ldLlF1ZXN0aW9uLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbkluZm9zKFF1ZXN0aW9uc1tpXSk7XG4gICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbXCJkZWxldGVPa1wiXS52YWx1ZT10cnVlO1xuICAgICAgICAgICAgc2VuZFF1ZXN0aW9uRm9ybSh0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZihRdWVzdGlvbnMubGVuZ3RoIDwgY29uZmlnLm5iUXVlc3Rpb25zTWF4IHx8IGNvbmZpZy5uYlF1ZXN0aW9uc01heCA9PT0gMClcbiAgICB7XG4gICAgICAgIGxldCBuZXdCdG49XCI8YSBocmVmPScjbmV3UXVlc3Rpb24nIGlkPSduZXdRdWVzdGlvbicgY2xhc3M9J2J1dHRvbic+XCIrYWRkUXVlc3Rpb25UeHQrXCI8L2E+XCI7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25zLCBcInBcIiwgbmV3QnRuLCBcIlwiLCBbXSwgeyB9LCBmYWxzZSk7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmV3UXVlc3Rpb25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiUXVlc3Rpb25uYWlyZUlkXCJdLnZhbHVlPWZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW1wiaWRcIl0udmFsdWU7XG4gICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbXCJyYW5rXCJdLnZhbHVlPShRdWVzdGlvbnMubGVuZ3RoPT09MCkgPyBjb25maWdRdWVzdGlvbm5haXJlcy5RdWVzdGlvbi5yYW5rLmRlZmF1bHRWYWx1ZSA6IFF1ZXN0aW9ucy5sZW5ndGgrMTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVlc3Rpb25zXCIpO1xuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1F1ZXN0aW9ubmFpcmVzLlF1ZXN0aW9uLCBmb3JtUXVlc3Rpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIEVudm9pIGRlcyBkb25uw6llcyBkJ3VuZSBxdWVzdGlvbiBldCBkZSBzZXMgcsOpcG9uc2UuIFBldXQgw6p0cmUgZ8OpbsOpcsOpIHBhciBsZSBib3V0b24gc3VibWl0IG91IHBhciBsZSBsaWVuIFwic3VwcHJpbWVyXCIuXG5jb25zdCBzZW5kUXVlc3Rpb25Gb3JtID0gKHRva2VuKSA9Plxue1xuICAgIGNvbnN0IGRpdlJlc3BvbnNlUXVlc3Rpb249ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVF1ZXN0aW9uXCIpO1xuICAgIGRpdlJlc3BvbnNlUXVlc3Rpb24uaW5uZXJIVE1MPVwiXCI7XG4gICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtUXVlc3Rpb24pO1xuICAgIGNvbnN0IHhoclF1ZXN0aW9uRGF0YXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKCFpc0VtcHR5KGRhdGFzLmRlbGV0ZU9rKSkpXG4gICAgICAgIHhoclF1ZXN0aW9uRGF0YXMub3BlbihcIkRFTEVURVwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMucXVlc3Rpb25zUm91dGUrZGF0YXMuaWQpO1xuICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpKVxuICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLm9wZW4oXCJQVVRcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnF1ZXN0aW9uc1JvdXRlK2RhdGFzLmlkKTsvLyBtaXNlIMOgIGpvdXIgZCd1bmUgcXVlc3Rpb25cbiAgICBlbHNlXG4gICAgICAgIHhoclF1ZXN0aW9uRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnF1ZXN0aW9uc1JvdXRlKTsvLyBub3V2ZWxsZSBxdWVzdGlvblxuICAgIHhoclF1ZXN0aW9uRGF0YXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBpZiAoKHRoaXMuc3RhdHVzID09PSAyMDAgfHwgdGhpcy5zdGF0dXMgPT09IDIwMSkgJiYgcmVzcG9uc2UubWVzc2FnZSE9dW5kZWZpbmVkICYmIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmUhPXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHNob3dRdWVzdGlvbkluZm9zKHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmUuUXVlc3Rpb25zLCB0b2tlbik7Ly8gbGUgc2VydmV1ciBtZSByZXRvdXJuZSB1bmUgdmVyc2lvbiBhY3R1YWxpc8OpZSBkZSBsYSBsaXN0ZSBkZXMgcXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbnMsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNxdWVzdGlvbnNMaXN0XCIpO1xuICAgICAgICAgICAgICAgIHNob3dOZXh0UXVlc3Rpb25uYWlyZXModG9rZW4pOy8vIGNhciBwZXV0IGF2b2lyIMOpdm9sdcOpIHN1aXZhbnQgY2UgcXVpIHMnZXN0IHBhc3PDqVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZVF1ZXN0aW9uLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZVF1ZXN0aW9uLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB4aHJRdWVzdGlvbkRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgIHhoclF1ZXN0aW9uRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdG9rZW4pO1xuICAgIHhoclF1ZXN0aW9uRGF0YXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xufVxuXG4vLyBBZmZpY2hhbnQgbGVzIGluZm9zIGNvbm51ZXMgY29uY2VybmFudCB1biBxdWVzdGlvbm5haXJlIGV0IHNlcyBkw6lwZW5kYW5jZXNcbmNvbnN0IHNob3dGb3JtUXVlc3Rpb25uYWlyZUluZm9zID0gKGlkLCB0b2tlbikgPT5cbntcbiAgICBjb25zdCB4aHJHZXRJbmZvcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhockdldEluZm9zLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnUXVlc3Rpb25uYWlyZXMuZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIitpZCk7XG4gICAgeGhyR2V0SW5mb3Mub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5RdWVzdGlvbm5haXJlICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5yZXNldCgpOy8vIHBvdXIgbmUgcGFzIGdhcmRlciBsZXMgZG9ubsOpZXMgZMOpasOgIGFmZmljaMOpZXMgc2kgdmlkZSBkYW5zIGNlIHF1aSBlc3QgcmV0b3VybsOpXG4gICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIHJlc3BvbnNlLlF1ZXN0aW9ubmFpcmUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihmb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YT09PVwicHVibGlzaGluZ0F0XCIgJiYgcmVzcG9uc2UuUXVlc3Rpb25uYWlyZVtkYXRhXSE9PW51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9ubmFpcmUuZWxlbWVudHNbZGF0YV0udmFsdWU9ZGF0ZUZvcm1hdChyZXNwb25zZS5RdWVzdGlvbm5haXJlW2RhdGFdLCBcImZvcm1cIik7Ly8gISEgcmV2b2lyIGNhciBmb3JtYXQgcG91dmFudCBwb3NlciBzb3VjaXMgc2kgbmF2aWdhdGV1ciBuZSBnw6hyZSBwYXMgbGVzIGNoYW1wcyBkZSB0eXBlIFwiZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tkYXRhXS52YWx1ZT1yZXNwb25zZS5RdWVzdGlvbm5haXJlW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVsZXRlQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICB9Ly8gYWpvdXRlciBnZXN0aW9uIGRlcyByZXRvdXJzIGVuIGVycmV1ciA/XG4gICAgICAgICAgICBpZihyZXNwb25zZS5UYWdzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgY2xhc3NpZmljYXRpb249XCJcIjtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UuVGFncylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGk9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbis9cmVzcG9uc2UuVGFnc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2lmaWNhdGlvbis9XCIsXCIrcmVzcG9uc2UuVGFnc1tpXS5uYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tcImNsYXNzaWZpY2F0aW9uXCJdLnZhbHVlPWNsYXNzaWZpY2F0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzcG9uc2UuR3JvdXApKVxuICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW1wiZ3JvdXBcIl0udmFsdWU9cmVzcG9uc2UuR3JvdXAuR3JvdXAudGl0bGUrXCIgKFwiK3Jlc3BvbnNlLkdyb3VwLkdyb3VwLmlkK1wiKVwiO1xuICAgICAgICAgICAgZGl2TGlua3Muc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBkaXZRdWVzdGlvbnMuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBkaXZJbGx1c3RyYXRpb25zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgaWYocmVzcG9uc2UuTGlua3MgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNob3dMaW5rSW5mb3MocmVzcG9uc2UuTGlua3MsIHRva2VuKTtcbiAgICAgICAgICAgIGlmKHJlc3BvbnNlLlF1ZXN0aW9ucyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2hvd1F1ZXN0aW9uSW5mb3MocmVzcG9uc2UuUXVlc3Rpb25zLCB0b2tlbik7XG4gICAgICAgICAgICBpZihyZXNwb25zZS5JbGx1c3RyYXRpb25zICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzaG93SWxsdXN0cmF0aW9uSW5mb3MocmVzcG9uc2UuSWxsdXN0cmF0aW9ucywgdG9rZW4pO1xuICAgICAgICAgICAgaGVscFB1Ymxpc2hpbmdBdC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiOy8vIGluZm8gdW5pcXVlbWVudCB1dGlsZSBwb3VyIFwicGxhY2VyXCIgdW4gbm91dmVhdSBxdWl6XG4gICAgICAgICAgICAvLyDDoCByZXZvaXIgOiByZW1wbGFjZXIgbGllbiBwb3VyIHVuIGJvdXRvbiArIHJlc2V0IGNvbXBsZXQgZHUgZm9ybXVsYWlyZSwgeSBjb21wcmlzIGNoYW1wcyBoaWRkZW4gOlxuICAgICAgICAgICAgYnRuTmV3UXVlc3Rpb25uYWlyZS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGJ0bk5ld1F1ZXN0aW9ubmFpcmUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBjb25maWdUZW1wbGF0ZS5xdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlKTtcbiAgICAgICAgICAgIGJ0blByZXZpZXdRdWVzdGlvbm5haXJlLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgaWYocmVzcG9uc2UuUXVlc3Rpb25uYWlyZVtcImlzUHVibGlzaGVkXCJdID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICBidG5QcmV2aWV3UXVlc3Rpb25uYWlyZS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzK1wiL1wiK2lkK1wiL1wiK3Rva2VuKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBidG5QcmV2aWV3UXVlc3Rpb25uYWlyZS5zZXRBdHRyaWJ1dGUoXCJocmVmXCIsIGNvbmZpZy5zaXRlVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMrcmVzcG9uc2UuUXVlc3Rpb25uYWlyZVtcInNsdWdcIl0rXCIuaHRtbFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB4aHJHZXRJbmZvcy5zZW5kKCk7XG59XG5cbi8vIEFmZmljaGUgbGVzIHF1ZXN0aW9ubmFpcmVzIGJpZW50w7R0IHB1Ymxpw6lzLlxuY29uc3Qgc2hvd05leHRRdWVzdGlvbm5haXJlcyA9ICh0b2tlbikgPT5cbntcbiAgICBjb25zdCB4aHJOZXh0UXVlc3Rpb25uYWlyZXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMucXVlc3Rpb25uYWlyZVJvdXRlcytjb25maWdRdWVzdGlvbm5haXJlcy5nZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzKTtcbiAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgbGlzdEhUTUw9XCJcIiwgZGF5U3RyLCBvcHRpb25zRGF5U3RyID0geyB3ZWVrZGF5OiAnbG9uZyd9O1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5xdWVzdGlvbm5haXJlcylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRheVN0cj1uZXcgSW50bC5EYXRlVGltZUZvcm1hdChsYW5nLCBvcHRpb25zRGF5U3RyKS5mb3JtYXQobmV3IERhdGUocmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0uZGF0ZVB1Ymxpc2hpbmcpKTtcbiAgICAgICAgICAgICAgICAgICAgbGlzdEhUTUwrPVwiPGxpPlwiK2RheVN0citcIiBcIitkYXRlRm9ybWF0KHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmRhdGVQdWJsaXNoaW5nLCBcImZyXCIpK1wiOiA8YSBocmVmPSdcIitjb25maWdUZW1wbGF0ZS5xdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlK1wiP2lkPVwiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmlkK1wiJyBpZD0ncXVlc3Rpb25uYWlyZV9cIityZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pZCtcIic+XCIrcmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0udGl0bGUrXCI8L2E+XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmlzUHVibGlzaGFibGU9PT1mYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIiA8c3BhbiBjbGFzcz0nZXJyb3InPihcIitxdWVzdGlvbm5haXJlTmVlZEJlQ29tcGxldGVkK1wiKTwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCE9PTApXG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25uYWlyZXMsIFwiaDNcIiwgbmV4dFF1ZXN0aW9ubmFpcmVzTGlzdC5yZXBsYWNlKFwiI05CXCIsIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoaGVscFB1Ymxpc2hpbmdBdCwgXCJlbVwiLCBuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlK2RhdGVGb3JtYXQobmV3IERhdGUocmVzcG9uc2UuZGF0ZU5lZWRlZCksIFwiZnJcIikpO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25uYWlyZXMsIFwidWxcIiwgbGlzdEhUTUwsIFwiXCIsIFwiXCIsIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UucXVlc3Rpb25uYWlyZXMpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVfXCIrcmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0uaWQpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVF1ZXN0aW9ubmFpcmVJbmZvcyhlLnRhcmdldC5pZC5zcGxpdChcIl9cIilbMV0sIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVlc3Rpb25uYWlyZXNcIik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0vLyBham91dGVyIGdlc3Rpb24gZXJyZXVycyByZcOndWVzIGR1IHNlcnZldXIgP1xuICAgICAgICB9XG4gICAgfVxuICAgIHhock5leHRRdWVzdGlvbm5haXJlcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit0b2tlbik7IFxuICAgIHhock5leHRRdWVzdGlvbm5haXJlcy5zZW5kKCk7XG59XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHsgICAgICAgIFxuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1wibWFuYWdlclwiLCBcImFkbWluXCJdLCBcIi9cIitjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSwgeyBtZXNzYWdlOiBuZWVkQmVDb25uZWN0ZWQsIGNvbG9yOlwiZXJyb3JcIiB9LCB3aW5kb3cubG9jYXRpb24pO1xuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgZGl2TWFpbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGdldExvY2FseShcIm1lc3NhZ2VcIikpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIGdldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkubWVzc2FnZSwgXCJcIiwgW2dldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkuY29sb3JdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIE1pc2Ugw6Agam91ciBkdSBsaWVuIFwiY29tcHRlXCIgZHUgaGVhZGVyIDpcbiAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdUZW1wbGF0ZSk7XG4gICAgICAgICAgICAvLyBJbml0aWFsaXNhdGlvbiBkZXMgZm9ybXVsYWlyZXMgOlxuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1F1ZXN0aW9ubmFpcmVzLCBmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdRdWVzdGlvbm5haXJlcy5RdWVzdGlvbm5haXJlLCBmb3JtUXVlc3Rpb25uYWlyZSk7XG4gICAgICAgICAgICAvLyBWaWRlL2NhY2hlIGxlcyDDqWzDqW1lbnRzIGludXRpbGVzIGVuIG1vZGUgY3LDqWF0aW9uIDpcbiAgICAgICAgICAgIGJ0blByZXZpZXdRdWVzdGlvbm5haXJlLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICBkZWxldGVDaGVja0JveC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgICAgICAgICAvLyBTaSB1biBpZCBlc3QgcGFzc8OpIHBhciBsJ3VybCwgb24gZXNzYXllIGQnYWZmaWNoZXIgbGUgcXVlc3Rpb25uYWlyZSA6XG4gICAgICAgICAgICBsZXQgdXJsRGF0YXM9Z2V0VXJsUGFyYW1zKCk7XG4gICAgICAgICAgICBpZih1cmxEYXRhcyAmJiB1cmxEYXRhcy5pZCE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzaG93Rm9ybVF1ZXN0aW9ubmFpcmVJbmZvcyh1cmxEYXRhcy5pZCwgdXNlci50b2tlbik7XG4gICAgICAgICAgICAvLyBsZXMgcHJvY2hhaW5lcyBwdWJsaWNhdGlvbnMgOlxuICAgICAgICAgICAgc2hvd05leHRRdWVzdGlvbm5haXJlcyh1c2VyLnRva2VuKTtcbiAgICAgICAgICAgIC8vIExhbmNlbWVudCBkJ3VuZSByZWNoZXJjaGUgOlxuICAgICAgICAgICAgZm9ybVNlYXJjaC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybVNlYXJjaCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyU2VhcmNoID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSk7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UubGVuZ3RoPT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwicFwiLCBzZWFyY2hRdWVzdGlvbm5haXJlV2l0aE5vUmVzdWx0LCBcIlwiLCBbXCJpbmZvXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0SFRNTD1cIjxvcHRpb24gdmFsdWU9Jyc+PC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEhUTUwrPVwiPG9wdGlvbiB2YWx1ZT0nXCIrcmVzcG9uc2VbaV0uaWQrXCInPlwiK3Jlc3BvbnNlW2ldLnRpdGxlK1wiPC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInNlbGVjdFwiLCBzZWxlY3RIVE1MLCBcInNlbGVjdFNlYXJjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoU2VsZWN0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0U2VhcmNoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNlYXJjaFNlbGVjdC52YWx1ZSE9PVwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3Moc2VhcmNoU2VsZWN0LnZhbHVlLCB1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFpZGUgw6AgbGEgc2Fpc2llIHBvdXIgbGUgY2xhc3NlbWVudCBkdSBxdWl6XG4gICAgICAgICAgICBpbnB1dENsYXNzaWZpY2F0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZ3M9aW5wdXRDbGFzc2lmaWNhdGlvbi52YWx1ZS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgdGFncy5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFRhZz10YWdzWzBdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZihsYXN0VGFnLmxlbmd0aCA+PSAyKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyU2VhcmNoVGFncyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hUYWdzLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnRhZ3NTZWFyY2hSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaFRhZ3Mub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzcG9uc2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscENsYXNzaWZpY2F0aW9uLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoaGVscENsYXNzaWZpY2F0aW9uLCBcImFcIiwgcmVzcG9uc2VbaV0ubmFtZSwgXCIjdGFnXCIrcmVzcG9uc2VbaV0uaWQsIFtcImluZm9cIl0sIHsgaHJlZjpcIiN0YWdcIityZXNwb25zZVtpXS5pZCB9LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiN0YWdcIityZXNwb25zZVtpXS5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3NbMF09ZS50YXJnZXQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q2xhc3NpZmljYXRpb24udmFsdWU9dGFncy5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwQ2xhc3NpZmljYXRpb24uaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaFRhZ3Muc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaFRhZ3Muc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaFRhZ3Muc2VuZChKU09OLnN0cmluZ2lmeSh7c2VhcmNoOiBsYXN0VGFnfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBBaWRlIMOgIGxhIHPDqWxlY3Rpb24gZCd1biBncm91cGUgcG91ciBsZSBxdWl6XG4gICAgICAgICAgICBpbnB1dEdyb3VwLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlW1wiR3JvdXBJZFwiXS52YWx1ZT1cIlwiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSW5wdXQ9aW5wdXRHcm91cC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYoZ3JvdXBJbnB1dC5sZW5ndGggPj0gY29uZmlnUXVlc3Rpb25uYWlyZXMuc2VhcmNoR3JvdXBzLm1pbmxlbmd0aClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclNlYXJjaEdyb3VwcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hHcm91cHMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLmdyb3VwUm91dGVzK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnNlYXJjaEdyb3Vwc1JvdXRlKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoR3JvdXBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBHcm91cC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGhlbHBHcm91cCwgXCJhXCIsIHJlc3BvbnNlW2ldLnRpdGxlLCBcIiNncm91cFwiK3Jlc3BvbnNlW2ldLmlkLCBbXCJpbmZvXCJdLCB7IGhyZWY6XCIjZ3JvdXBcIityZXNwb25zZVtpXS5pZCB9LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiNncm91cFwiK3Jlc3BvbnNlW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRHcm91cC52YWx1ZT1yZXNwb25zZVtpXS50aXRsZStcIiAoXCIrcmVzcG9uc2VbaV0uaWQrXCIpXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9ubmFpcmVbXCJHcm91cElkXCJdLnZhbHVlPXJlc3BvbnNlW2ldLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHJlc3BvbnNlW2ldLm1heFJhbmspKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmtJbkdyb3VwLnZhbHVlPXJlc3BvbnNlW2ldLm1heFJhbmsrMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmFua0luR3JvdXAudmFsdWU9MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwR3JvdXAuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hHcm91cHMuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaEdyb3Vwcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoR3JvdXBzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3NlYXJjaEdyb3VwczogZ3JvdXBJbnB1dH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gVHJhaXRlbWVudCBkZSBsJ2Vudm9pIGR1IGZvcm11bGFpcmUgZGVzIGluZm9zIGRlIGJhc2UgZHUgcXVpelxuICAgICAgICAgICAgZm9ybVF1ZXN0aW9ubmFpcmUuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1RdWVzdGlvbm5haXJlKTtcbiAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5yYW5rSW5Hcm91cCkgJiYgaXNFbXB0eShkYXRhcy5Hcm91cElkKSlcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIG5lZWRHcm91cElmUmFuaywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzRW1wdHkoZGF0YXMucmFua0luR3JvdXApICYmICFpc0VtcHR5KGRhdGFzLkdyb3VwSWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMucmFua0luR3JvdXA9MTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyUXVlc3Rpb25uYWlyZURhdGFzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSAmJiAoZGF0YXMuZGVsZXRlT2shPT11bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLm9wZW4oXCJERUxFVEVcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrXCIvXCIrZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5xdWVzdGlvbm5haXJlUm91dGVzK1wiL1wiK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5xdWVzdGlvbm5haXJlUm91dGVzK1wiL1wiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMSAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgYWRkT2tNZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMuaWQ9cmVzcG9uc2UuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dOZXh0UXVlc3Rpb25uYWlyZXModXNlci50b2tlbik7Ly8gcGV1dCBhdm9pciDDqXZvbHXDqSBzdWl2YW50IGNlIHF1aSBzJ2VzdCBwYXNzw6lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd05leHRRdWVzdGlvbm5haXJlcyh1c2VyLnRva2VuKTsvLyBwZXV0IGF2b2lyIMOpdm9sdcOpIHN1aXZhbnQgY2UgcXVpIHMnZXN0IHBhc3PDqVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXMuZGVsZXRlT2sgPT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5lcnJvcnMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3MoZGF0YXMuaWQsIHVzZXIudG9rZW4pOy8vIG9uIGFjdHVhbGlzZSBsZXMgZG9ubsOpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdkxpbmtzLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZJbGx1c3RyYXRpb25zLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZRdWVzdGlvbnMuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtTGluay5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHNlbmRMaW5rRm9ybSh1c2VyLnRva2VuKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybUlsbHVzdHJhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHNlbmRJbGx1c3RyYXRpb25Gb3JtKHVzZXIudG9rZW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb3JtUXVlc3Rpb24uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzZW5kUXVlc3Rpb25Gb3JtKHVzZXIudG9rZW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2Q3Jhc2gsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcbmhlbGxvRGV2KCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIHLDqWN1cMOpcmFudCBsZXMgcGFyYW3DqHRyZXMgcGFzc8OpcyBwYXIgbCd1cmxcbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9Plxue1xuICAgIGlmKGlzRW1wdHkobG9jYXRpb24uc2VhcmNoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoXCImXCIpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpIHx8IHBhcmFtZXRlcnMubGVuZ3RoPT09MClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBcbiAgICBsZXQgcGFyYW0sIGRhdGFzPXt9O1xuICAgIGZvcihsZXQgaSBpbiBwYXJhbWV0ZXJzKVxuICAgIHtcbiAgICAgICAgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYocGFyYW0ubGVuZ3RoPT09MilcbiAgICAgICAgICAgIGRhdGFzW3BhcmFtWzBdXT1kZWNvZGVVUkkocGFyYW1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6IG91IGQndW4gZ3JvdXBlIGRlIHF1aXpzXG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICghaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSB8fCAhaXNFbXB0eShhbnN3ZXIuR3JvdXBJZCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkpXG4gICAgICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGF0YXMuR3JvdXBJZD1hbnN3ZXIuR3JvdXBJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbGx1c3RyYXRpb25zLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9saW5rcy5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL2lsbHVzdHJhdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9saW5rJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9uJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmUkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9pbGx1c3RyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvbGluay5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsiaW5zdGFuY2UiLCJyZXF1aXJlIiwibW9kdWxlIiwiZXhwb3J0cyIsImlsbHVzdHJhdGlvbnNSb3V0ZSIsIklsbHVzdHJhdGlvbiIsImFsdCIsIm1heGxlbmd0aCIsInRpdGxlIiwiY2FwdGlvbiIsImltYWdlIiwicmVxdWlyZWQiLCJhY2NlcHQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJqb2luIiwiZGlySWxsdXN0cmF0aW9uc1RtcCIsImRpcklsbHVzdHJhdGlvbnMiLCJ1c2VycyIsInF1ZXN0aW9ubmFpcmVzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsImxpbmtzUm91dGUiLCJMaW5rIiwidXJsIiwiYW5jaG9yIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiYWRkQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJiYWRVcmwiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuU2hvd09uV2ViU2l0ZSIsImRlbGV0ZUJ0blR4dCIsImRlbGV0ZUZhaWxNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aENyb24iLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aFRva2VuIiwibmVlZGVkUGFyYW1zIiwibmV4dFBhZ2UiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJub3RWYWxpZEZvcm1hdCIsInByZXZpb3VzUGFnZSIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzY3JpcHRUaW1pbmdJbmZvIiwic3RhdHNBZG1pbiIsInN1YnNjcmlwdGlvbkNhbGwiLCJ1cGRhdGVCdG5UeHQiLCJ1cGRhdGVPa01lc3NhZ2UiLCJhZGRlZE9rTWVzc2FnZSIsImFkZElsbHVzdHJhdGlvblR4dCIsImRlZmF1bHRBbHQiLCJkZWxldGVkT2tNZXNzYWdlIiwiaW50cm9Ob0lsbHVzdHJhdGlvbiIsImludHJvVGl0bGVGb3JJbGx1c3RyYXRpb24iLCJuZWVkR29vZEZpbGUiLCJuZWVkR29vZExvbmdBbHQiLCJuZWVkR29vZExvbmdDYXB0aW9uIiwibmVlZEdvb2RMb25nVGl0bGUiLCJuZWVkR29vZExvbmdVcmwiLCJuZWVkTWF4SWxsdXN0cmF0aW9uc0ZvclF1ZXN0aW9ubmFpcmUiLCJuZWVkUXVlc3Rpb25uYWlyZUZvcklsbHVzdHJhdGlvbiIsIm5lZWRVbmlxdWVVcmwiLCJuZWVkVXJsIiwibm90Rm91bmQiLCJ1cGRhdGVkT2tNZXNzYWdlIiwiYWRkTGlua1R4dCIsImRlZmF1bHRWYWx1ZUZvckxpbmsiLCJpbnRyb05vTGluayIsImludHJvVGl0bGVGb3JMaW5rIiwibmVlZEFuY2hvciIsIm5lZWRHb29kTG9uZ0FuY2hvciIsIm5lZWRNYXhMaW5rc0ZvclF1ZXN0aW9ubmFpcmUiLCJuZWVkTm90VG9vTG9uZ1VybCIsIm5lZWRRdWVzdGlvbm5haXJlIiwibmVlZFZhbGlkVXJsIiwiYWRkUXVlc3Rpb25UeHQiLCJpbnRyb05vUXVlc3Rpb24iLCJpbnRyb1RpdGxlRm9yUXVlc3Rpb24iLCJuZWVkTWF4UXVlc3Rpb25zIiwibmVlZE5vdFRvb0xvbmdUZXh0IiwibmVlZE51bWJlckZvclJhbmsiLCJuZWVkVGV4dCIsImJ0blNlbmRSZXNwb25zZSIsImJ0blNoYXJlUXVpelR4dCIsImJ0blNoYXJlUXVpek1haWxCb2R5IiwiYnRuU2hvd1F1ZXN0aW9ubmFpcmUiLCJjb3JyZWN0QW5zd2VyVHh0IiwiZXN0aW1hdGVkVGltZSIsImVzdGltYXRlZFRpbWVPcHRpb24iLCJtZWRpdW0iLCJleHBsYW5hdGlvbkJlZm9yZVR4dCIsImhhdmVCZWVuUHVibGlzaGVkIiwiaGF2ZUJlZW5SZWdlbmVyYXRlZCIsImxhc3RVcGRhdGVkIiwibGlua0dvVG9OZXh0RWxlbWVudCIsImxpbmtHb1RvUXVpeiIsIm5lZWRDb3JyZWN0UHVibGlzaGluZ0RhdGUiLCJuZWVkRXN0aW1hdGVkVGltZSIsIm5lZWRHcm91cElmUmFuayIsIm5lZWRJbnRyb2R1Y3Rpb24iLCJuZWVkS25vd0lmSXNQdWJsaXNoZWQiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkTm90VG9vTG9uZ1RpdGxlIiwibmVlZFRpdGxlIiwibmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZSIsIm5leHRRdWVzdGlvbm5haXJlc0xpc3QiLCJxdWVzdGlvbm5haXJlc05hbWUiLCJxdWVzdGlvbm5haXJlTmVlZEJlQ29tcGxldGVkIiwicHVibGlzaGVkQXQiLCJwdWJsaXNoZWRCeSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVSZXN1bHRUaXRsZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoTm9SZXN1bHQiLCJzZWFyY2hRdWVzdGlvbm5haXJlV2l0aFJlc3VsdCIsIndyb25nQW5zd2VyVHh0IiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ3ZWxjb21lTWVzc2FnZSIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnIiwiY29uZmlnSWxsdXN0cmF0aW9ucyIsImNvbmZpZ0xpbmtzIiwiY29uZmlnUXVlc3Rpb25uYWlyZXMiLCJjb25maWdUZW1wbGF0ZSIsImJ0bk5ld1F1ZXN0aW9ubmFpcmUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUiLCJkZWxldGVDaGVja0JveCIsImRpdkNyYXNoIiwiZGl2SWxsdXN0cmF0aW9ucyIsImRpdkxpbmtzIiwiZGl2TWFpbiIsImRpdk1lc3NhZ2UiLCJkaXZRdWVzdGlvbm5haXJlcyIsImRpdlF1ZXN0aW9ucyIsImRpdlJlc3BvbnNlIiwiZGl2U2VhcmNoUmVzdWx0IiwiZm9ybUxpbmsiLCJmb3JtSWxsdXN0cmF0aW9uIiwiZm9ybVF1ZXN0aW9uIiwiZm9ybVF1ZXN0aW9ubmFpcmUiLCJmb3JtU2VhcmNoIiwiaGVscENsYXNzaWZpY2F0aW9uIiwiaGVscEdyb3VwIiwiaGVscFB1Ymxpc2hpbmdBdCIsImlucHV0Q2xhc3NpZmljYXRpb24iLCJpbnB1dEdyb3VwIiwiaW5wdXRSYW5rSW5Hcm91cCIsImhpZGVBbGxGb3JtcyIsImVtcHlBbmRIaWRlRm9ybSIsInNob3dGb3JtTGlua0luZm9zIiwic3R5bGUiLCJkaXNwbGF5Iiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiZGF0YSIsImVsZW1lbnRzIiwic2hvd0xpbmtJbmZvcyIsIkxpbmtzIiwidG9rZW4iLCJhZGRFbGVtZW50IiwibGlzdExpbmtzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwic2VuZExpbmtGb3JtIiwibmV3QnRuIiwiZGl2UmVzcG9uc2VMaW5rIiwiaW5uZXJIVE1MIiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJMaW5rRGF0YXMiLCJYTUxIdHRwUmVxdWVzdCIsImRlbGV0ZU9rIiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJzdGF0dXMiLCJtZXNzYWdlIiwicXVlc3Rpb25uYWlyZSIsIkFycmF5IiwiaXNBcnJheSIsInNob3dOZXh0UXVlc3Rpb25uYWlyZXMiLCJlcnJvcnMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsInN0cmluZ2lmeSIsInNob3dGb3JtSWxsdXN0cmF0aW9uSW5mb3MiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzaG93SWxsdXN0cmF0aW9uSW5mb3MiLCJJbGx1c3RyYXRpb25zIiwibGlzdElsbHVzdHJhdGlvbnMiLCJzZW5kSWxsdXN0cmF0aW9uRm9ybSIsImRpdlJlc3BvbnNlSWxsdXN0cmF0aW9uIiwiZGF0YXNXaXRoRmlsZXMiLCJGb3JtRGF0YSIsInhocklsbHVzdHJhdGlvbkRhdGFzIiwic2hvd0Zvcm1RdWVzdGlvbkluZm9zIiwiQ2hvaWNlcyIsImlzQ29ycmVjdCIsImNoZWNrZWQiLCJzaG93UXVlc3Rpb25JbmZvcyIsIlF1ZXN0aW9ucyIsImxpc3RRdWVzdGlvbnMiLCJzZW5kUXVlc3Rpb25Gb3JtIiwiZGl2UmVzcG9uc2VRdWVzdGlvbiIsInhoclF1ZXN0aW9uRGF0YXMiLCJzaG93Rm9ybVF1ZXN0aW9ubmFpcmVJbmZvcyIsInhockdldEluZm9zIiwicmVzZXQiLCJkYXRlRm9ybWF0IiwiVGFncyIsImNsYXNzaWZpY2F0aW9uIiwic2V0QXR0cmlidXRlIiwieGhyTmV4dFF1ZXN0aW9ubmFpcmVzIiwibGlzdEhUTUwiLCJkYXlTdHIiLCJvcHRpb25zRGF5U3RyIiwid2Vla2RheSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsImZvcm1hdCIsImRhdGVQdWJsaXNoaW5nIiwiaXNQdWJsaXNoYWJsZSIsImRhdGVOZWVkZWQiLCJ0YXJnZXQiLCJzcGxpdCIsImluaXRpYWxpc2UiLCJpc0Nvbm5lY3RlZCIsImNoZWNrU2Vzc2lvbiIsImNvbG9yIiwiZ2V0TG9jYWx5IiwicmVtb3ZlTG9jYWx5IiwidXNlciIsInVwZGF0ZUFjY291bnRMaW5rIiwidXJsRGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJ4aHJTZWFyY2giLCJzZWxlY3RIVE1MIiwic2VhcmNoU2VsZWN0IiwidGFncyIsInJldmVyc2UiLCJsYXN0VGFnIiwieGhyU2VhcmNoVGFncyIsImdyb3VwSW5wdXQiLCJ4aHJTZWFyY2hHcm91cHMiLCJtYXhSYW5rIiwicmFua0luR3JvdXAiLCJHcm91cElkIiwieGhyUXVlc3Rpb25uYWlyZURhdGFzIiwiY29uc29sZSIsImVycm9yIiwiaGVsbG9EZXYiLCJzYXZlTG9jYWx5IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwiaW5wdXRzQ29uZiIsIm15Rm9ybSIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsImVudHJpZSIsImVudHJpZXMiLCJlbXB5Rm9ybSIsInR5cGUiLCJwYXJhbWV0ZXJzIiwicGFyYW0iLCJkZWNvZGVVUkkiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwibmJRdWVzdGlvbnMiLCJRdWVzdGlvbm5haXJlSWQiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwibm93IiwieGhyIiwib25sb2FkIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIiwib25lcnJvciIsInN0YXR1c1RleHQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxRQUFRLEdBQUdDLG1CQUFPLENBQUMseUNBQUQsQ0FBeEI7O0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k7QUFDQUMsb0JBQWtCLEVBQUUsZ0JBRnhCO0FBR0k7QUFDQUMsY0FBWSxFQUNaO0FBQ0lDLE9BQUcsRUFBRTtBQUFFQyxlQUFTLEVBQUU7QUFBYixLQURUO0FBRUlDLFNBQUssRUFBRTtBQUFFRCxlQUFT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QUFQO0FBQ0g7QUFDSixXQWxDRCxNQW9DQTtBQUNJeEUsa0ZBQVksQ0FBQyxNQUFELENBQVo7QUFDQTJFLHdCQUFZLENBQUNOLGNBQUQsRUFBaUIzSCxPQUFqQixFQUEwQjRILFNBQTFCLENBQVo7QUFDQUUsbUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLFNBNUNEOztBQTZDQUssV0FBRyxDQUFDUSxPQUFKLEdBQWMsTUFBTVosTUFBTSxDQUFDSSxHQUFHLENBQUNTLFVBQUwsQ0FBMUI7O0FBQ0FULFdBQUcsQ0FBQzVILElBQUo7QUFDSDtBQUNKO0FBQ0osR0F0RU0sQ0FBUDtBQXVFSCxDQXpFTSxDLENBMEVQOztBQUNBLE1BQU0wSCxZQUFZLEdBQUcsQ0FBQ04sY0FBRCxFQUFpQjNILE9BQWpCLEVBQTBCNEgsU0FBMUIsS0FDckI7QUFDSSxNQUFHLENBQUNuUiwyREFBTyxDQUFDdUosT0FBRCxDQUFYLEVBQ0kyRSxvRUFBVSxDQUFDLFNBQUQsRUFBWTNFLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ3ZKLDJEQUFPLENBQUNtUixTQUFELENBQVgsRUFDSWpELG9FQUFVLENBQUMsS0FBRCxFQUFRaUQsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDblIsMkRBQU8sQ0FBQ2tSLGNBQUQsQ0FBWCxFQUNJaEosTUFBTSxDQUFDQyxRQUFQLENBQWdCQyxNQUFoQixDQUF1QjhJLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuanNcIik7XG4iLCJjb25zdCBpbnN0YW5jZSA9IHJlcXVpcmUoXCIuL2luc3RhbmNlXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIGlsbHVzdHJhdGlvbnNSb3V0ZTogXCIvaWxsdXN0cmF0aW9uL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIElsbHVzdHJhdGlvbiA6XG4gICAge1xuICAgICAgICBhbHQ6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICAgICAgY2FwdGlvbjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgICAgICBpbWFnZTogeyByZXF1aXJlZDogdHJ1ZSwgYWNjZXB0OiBpbnN0YW5jZS5taW1lVHlwZXNGb3JJbGx1c3RyYXRpb24uam9pbihcIixcIikgfVxuICAgIH0sXG4gICAgLy8gZmlsZXMgdXBsb2FkIHRlbXBvcnkgZGlyXG4gICAgZGlySWxsdXN0cmF0aW9uc1RtcCA6IFwidGVtcFwiLFxuICAgIGRpcklsbHVzdHJhdGlvbnM6IFwiZnJvbnQvcHVibGljL2ltZy9xdWl6c1wiXG59OyIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIGxpbmtzUm91dGU6IFwiL2xpbmsvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgTGluayA6XG4gICAge1xuICAgICAgICB1cmw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIGFuY2hvcjogeyBtYXhsZW5ndGg6IDE1MCwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH1cbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2lsbHVzdHJhdGlvblwiOiBcIi4uL2xhbmcvZnIvaWxsdXN0cmF0aW9uLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvaWxsdXN0cmF0aW9uJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9saW5rXCI6IFwiLi4vbGFuZy9mci9saW5rLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvbGluayRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvcXVlc3Rpb25cIjogXCIuLi9sYW5nL2ZyL3F1ZXN0aW9uLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvcXVlc3Rpb24kXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3F1ZXN0aW9ubmFpcmVcIjogXCIuLi9sYW5nL2ZyL3F1ZXN0aW9ubmFpcmUuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9xdWVzdGlvbm5haXJlJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkZWRPa01lc3NhZ2U6IFwiTCdpbGx1c3RyYXRpb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBhZGRJbGx1c3RyYXRpb25UeHQ6IFwiQWpvdXRlciB1bmUgaWxsdXN0cmF0aW9uXCIsXG4gICAgZGVmYXVsdEFsdCA6IFwiSWxsdXN0cmF0aW9uIGR1IHF1aXpcIixcbiAgICBkZWxldGVkT2tNZXNzYWdlOiBcIkwnaWxsdXN0cmF0aW9uIGEgYmllbiDDqXTDqSBzdXBwcmltw6llLlwiLFxuICAgIGludHJvTm9JbGx1c3RyYXRpb24gOiBcIkF1Y3VuZSBpbGx1c3RyYXRpb24gcG91ciBsJ2luc3RhbnQuXCIsXG4gICAgaW50cm9UaXRsZUZvcklsbHVzdHJhdGlvbiA6IFwiSWxsdXN0cmF0aW9ucyBkdSBxdWl6XCIsXG4gICAgbmVlZEdvb2RGaWxlIDogXCJWb3RyZSBmaWNoaWVyIG4nYSBwYXMgw6l0w6kgYWNjZXB0w6kuXCIsXG4gICAgbmVlZEdvb2RMb25nQWx0IDogXCJMZSB0ZXh0ZSBkZSBsYSBwcm9wcmnDqXTDqSAnYWx0JyBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRHb29kTG9uZ0NhcHRpb24gOiBcIkxlIHRleHRlIGRlIGxhIGzDqWdlbmRlIGRlIGwnaW1hZ2UgbmUgZG9pdCBwYXMgY29tcHRlciBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkR29vZExvbmdUaXRsZSA6IFwiTGUgdGV4dGUgZGUgbGEgcHJvcHJpw6l0w6kgJ3RpdGxlJyBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRHb29kTG9uZ1VybCA6IFwiTCd1cmwgZGUgbCdpbWFnZSBkb2l0IGNvbnRlbmlyIGVudHJlIDUgZXQgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhJbGx1c3RyYXRpb25zRm9yUXVlc3Rpb25uYWlyZSA6IFwiVm91cyBhdmV6IGTDqWrDoCBhdHRlaW50IGxlIG5vbWJyZSBtYXhpbWFsIGQnaWxsdXN0cmF0aW9ucyBwb3VyIGNlIHF1ZXN0aW9ubmFpcmUuXCIsXG4gICAgbmVlZFF1ZXN0aW9ubmFpcmVGb3JJbGx1c3RyYXRpb24gOiBcIlRlbnRhdGl2ZSBkJ2Fqb3V0L21pc2Ugw6Agam91ci9zdXBwcmVlc3Npb24gZCd1bmUgaWxsdXN0cmF0aW9uIHBvdXIgdW4gcXVlc3Rpb25uYWlyZSBuJ2F5YW50IHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWRVbmlxdWVVcmwgOiBcIkwndXJsIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1bmUgYXV0cmUgaW1hZ2UuXCIsXG4gICAgbmVlZFVybCA6IFwiTWVyY2kgZGUgZm91cm5pciB1bmUgdXJsIHBvdXIgbCdpbWFnZS5cIixcbiAgICBub3RGb3VuZDogXCJMJ2VucmVnaXN0cmVtZW50IGRlIGwnaWxsdXN0cmF0aW9uIG4nYSBwYXMgw6l0w6kgdHJvdXbDqSA6IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiTCdpbGx1c3RyYXRpb24gYSBiaWVuIMOpdMOpIG1vZGlmacOpZS5cIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZGVkT2tNZXNzYWdlOiBcIkxlIGxpZW4gYSBiaWVuIMOpdMOpIGFqb3V0w6kuXCIsXG4gICAgYWRkTGlua1R4dDogXCJBam91dGVyIHVuIGxpZW5cIixcbiAgICBkZWZhdWx0VmFsdWVGb3JMaW5rOiBcIkxpcmUgbCdhcnRpY2xlIHN1ciBXaWtpcMOpZGlhLlwiLFxuICAgIGRlbGV0ZWRPa01lc3NhZ2U6IFwiTGUgbGllbiBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGludHJvTm9MaW5rIDogXCJBdWN1biBsaWVuIHBvdXIgbCdpbnN0YW50LlwiLFxuICAgIGludHJvVGl0bGVGb3JMaW5rIDogXCJMZWN0dXJlcyBwcm9wb3PDqWVzXCIsXG4gICAgbmVlZEFuY2hvciA6IFwiTWVyY2kgZGUgZm91cm5pciB1bmUgYW5jcmUgcG91ciBjZSBsaWVuLlwiLFxuICAgIG5lZWRHb29kTG9uZ0FuY2hvciA6IFwiTWVyY2kgZGUgZm91cm5pciB1bmUgYW5jcmUgcG91ciBjZSBsaWVuIGNvbXB0YW50IGVudHJlIDUgZXQgMTUwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhMaW5rc0ZvclF1ZXN0aW9ubmFpcmUgOiBcIlZvdXMgYXZleiBkw6lqw6AgYXR0ZWludCBsZSBub21icmUgbWF4aW1hbCBkZSBsaWVucyBwb3VyIGNlIHF1ZXN0aW9ubmFpcmUuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdVcmwgOiBcIk1lcmNpIGRlICBzYWlzaXIgdW4gdXJsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUXVlc3Rpb25uYWlyZSA6IFwiTGUgcXVlc3Rpb25uYWlyZSBkdSBsaWVuIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkVXJsIDogXCJNZXJjaSBkZSAgc2Fpc2lyIGwndXJsIGR1IGxpZW4uXCIsXG4gICAgbmVlZFZhbGlkVXJsIDogXCJNZXJjaSBkZSAgc2Fpc2lyIHVuIHVybCBheWFudCB1biBmb3JtYXQgdmFsaWRlLlwiLFxuICAgIG5vdEZvdW5kIDogXCJMJ2VucmVnaXN0cmVtZW50IGR1IGxpZW4gbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiTGUgbGllbiBhIGJpZW4gw6l0w6kgbW9kaWZpw6kuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZE9rTWVzc2FnZTogXCJMYSBxdWVzdGlvbiBhIGJpZW4gw6l0w6kgYWpvdXTDqWUuXCIsXG4gICAgYWRkUXVlc3Rpb25UeHQ6IFwiQWpvdXRlciB1bmUgcXVlc3Rpb25cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTGEgcXVlc3Rpb24gYSBiaWVuIMOpdMOpIHN1cHByaW3DqWUuXCIsXG4gICAgaW50cm9Ob1F1ZXN0aW9uOiBcIkF1Y3VuZSBxdWVzdGlvbiBuJ2Egw6l0w6kgc2Fpc2llIHBvdXIgbCdpbnN0YW50XCIsXG4gICAgaW50cm9UaXRsZUZvclF1ZXN0aW9uOiBcIkxlcyBxdWVzdGlvbnMgZW5yZWdpc3Ryw6llc1wiLFxuICAgIG5lZWRNYXhRdWVzdGlvbnM6IFwiVm91cyBhdmV6IGTDqWrDoCBhdHRlaW50IGxlIG5vbWJyZSBtYXhpbWFsIGRlIHF1ZXN0aW9ucyBwb3VyIGNlIHF1ZXN0aW9ubmFpcmUgOiBcIiwgICAgICAgICBcbiAgICBuZWVkTm90VG9vTG9uZ1RleHQ6IFwiTGEgcXVlc3Rpb24gbmUgZG9pdCBwYXMgY29tcHRlciBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTnVtYmVyRm9yUmFuayA6IFwiVm91cyBkZXZleiBmb3VybmlyIHVuIG5vbWJyZSBzdXDDqXJpZXVyIG91IMOpZ2FsIMOgIDEgcG91ciBsZSByYW5nIGRlIGNldHRlIHF1ZXN0aW9uLlwiLCBcbiAgICBuZWVkUXVlc3Rpb25uYWlyZTogXCJMZSBxdWVzdGlvbm5haXJlIGNvbmNlcm7DqSBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZFRleHQ6IFwiTWVyY2kgZGUgc2Fpc2lyIGxlIHRleHRlIGRlIGxhIHF1ZXN0aW9uICFcIiwgICBcbiAgICBub3RGb3VuZDogXCJMJ2VucmVnaXN0cmVtZW50IGRlIGxhIHF1ZXN0aW9uIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2U6IFwiTGEgcXVlc3Rpb24gYSBiaWVuIMOpdMOpIG1vZGlmacOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsLy8gZMOpcGxhY8OpIGRhbnMgZ2VuZXJhbC5qc1xuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIiwvL2lkZW1cbiAgICBidG5TZW5kUmVzcG9uc2U6IFwiVGVzdGV6IHZvcyByw6lwb25zZXMuXCIsXG4gICAgYnRuU2hhcmVRdWl6VHh0OiBcIlBhcnRhZ2VyIHZpYSBcIixcbiAgICBidG5TaGFyZVF1aXpNYWlsQm9keTogXCJCb25qb3VyLCUwQSUwQVZvaWNpJTIwdW4lMjBsaWVuJTIwaW50ZXJuZXQlMjBxdWklMjBkZXZyYWl0JTIwdCdpbnTDqXJlc3NlciA6JTBBXCIsICAgIFxuICAgIGJ0blNob3dRdWVzdGlvbm5haXJlOiBcIlLDqXBvbmRyZSBhdSBxdWl6ICFcIixcbiAgICBjb3JyZWN0QW5zd2VyVHh0OiBcIkJvbm5lIHLDqXBvbnNlXCIsXG4gICAgZXN0aW1hdGVkVGltZTogXCJEdXLDqWUgZGUgbGVjdHVyZSBlc3RpbcOpZSA6IFwiLFxuICAgIGVzdGltYXRlZFRpbWVPcHRpb24gOlxuICAgIHtcbiAgICAgICAgc2hvcnQ6IFwiY291cnRlXCIsXG4gICAgICAgIG1lZGl1bTogXCJtb3llbm5lXCIsXG4gICAgICAgIGxvbmc6IFwibG9uZ3VlXCJcbiAgICB9LFxuICAgIGV4cGxhbmF0aW9uQmVmb3JlVHh0OiBcIkV4dHJhaXQgOlwiLFxuICAgIGhhdmVCZWVuUHVibGlzaGVkIDogXCI6TkIgbm91dmVhdXggcXVlc3Rpb25uYWlyZXMgb250IMOpdMOpIHB1Ymxpw6lzLlwiLFxuICAgIGhhdmVCZWVuUmVnZW5lcmF0ZWQgOiBcIkxlcyBwYWdlcyBIVE1MIGRlICNOQjEgcXVlc3Rpb25uYWlyZXMgb3Ugw6lsw6ltZW50cyBkZSBncm91cGVzLCAjTkIyIHF1aXpzIGdyb3Vww6lzIGV0ICNOQjMgdGjDqG1lcyBvbnQgw6l0w6kgcmVnw6luw6lyw6lzLlwiLFxuICAgIGxhc3RVcGRhdGVkOiBcIkRlcm5pw6hyZSBtaXNlIMOgIGpvdXIsIGxlIFwiLFxuICAgIGxpbmtHb1RvTmV4dEVsZW1lbnQ6IFwiQXJ0aWNsZSBzdWl2YW50XCIsXG4gICAgbGlua0dvVG9RdWl6OiBcIkFjY8OpZGVyIGF1IHF1aXpcIiwgICAgXG4gICAgbmVlZENvcnJlY3RQdWJsaXNoaW5nRGF0ZTogXCJMYSBkYXRlIGRlIHB1YmxpY2F0aW9uIGZvdXJuaWUgbidhIHBhcyB1biBmb3JtYXQgdmFsaWRlLlwiLFxuICAgIG5lZWRFc3RpbWF0ZWRUaW1lOiBcIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgdW5lIGVzdGltYXRpb24gZGUgbGEgZHVyw6llIGRlIGNlIHF1aXouXCIsXG4gICAgbmVlZEdyb3VwSWZSYW5rOiBcIlZvdXMgYXZleiBzYWlzaSB1biByYW5nIGRlIGNsYXNzZW1lbnQsIHNhbnMgc8OpbGVjdGlvbm5lciBsZSBncm91cGUgZHUgcXVpei5cIixcbiAgICBuZWVkSW50cm9kdWN0aW9uOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gdGV4dGUgZCdpbnRyb2R1Y3Rpb24gw6Agdm90cmUgcXVpei5cIixcbiAgICBuZWVkS25vd0lmSXNQdWJsaXNoZWQ6IFwiSWwgZmF1dCBzYXZvaXIgc2kgY2UgcXVpeiBlc3QgcHVibGnDqS5cIixcbiAgICBuZWVkTGFuZ3VhZ2U6IFwiVm91cyBkZXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSBkZSBjZSBxdWl6LlwiLFxuICAgIG5lZWROb3RUb29Mb25nVGl0bGU6IFwiTGUgdGl0cmUgZHUgcXVpeiBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWROdW1iZXJGb3JSYW5rOiBcIlZvdXMgZGV2ZXogc2Fpc2lyIHVuIG5vbWJyZSBlbnRpZXIgcG91ciBsZSByYW5nIGRlIGNlIHF1ZXN0aW9ubmFpcmUgZGFucyBzb24gZ3JvdXBlLlwiLCAgICAgICAgICAgICAgXG4gICAgbmVlZFRpdGxlOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gdGl0cmUgw6Agdm90cmUgcXVpei5cIixcbiAgICBuZWVkVW5pcXVlVXJsOiBcIkwndXJsIGR1IHF1aXogZG9pdCDDqnRyZSB1bmlxdWUuXCIsXG4gICAgbmVlZFVybDogXCJNZXJjaSBkZSBmb3VybmlyIGwndXJsIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZTogXCJQcm9jaGFpbmUgZGF0ZSBzYW5zIHF1aXogcHJvZ3JhbW3DqSA6IFwiLFxuICAgIG5leHRRdWVzdGlvbm5haXJlc0xpc3Q6IFwiTGVzICNOQiBwcm9jaGFpbnMgcXVpenMgZGV2YW50IMOqdHJlIHB1Ymxpw6lzXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNOYW1lOiBcInF1aXpcIixcbiAgICBxdWVzdGlvbm5haXJlTmVlZEJlQ29tcGxldGVkOiBcIlF1aXogaW5jb21wbGV0XCIsXG4gICAgcHVibGlzaGVkQXQ6IFwiLCBsZVwiLFxuICAgIHB1Ymxpc2hlZEJ5OiBcIlF1aXogcHVibGnDqSBwYXJcIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlUmVzdWx0VGl0bGUgOiBcIlLDqXN1bHRhdCBwb3VyIHZvdHJlIHJlY2hlcmNoZVwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVXaXRoTm9SZXN1bHQgOiBcIkF1Y3VuIHF1aXogbidhIMOpdMOpIHRyb3V2w6kgcG91ciB2b3RyZSByZWNoZXJjaGUuXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhSZXN1bHQgOiBcIklsIHkgYSAjTkIgYXJ0aWNsZSNTIGNvcnJlc3BvbmRhbnQgw6Agdm90cmUgcmVjaGVyY2hlIDpcIixcbiAgICB3cm9uZ0Fuc3dlclR4dDogXCJNYXV2YWlzZSByw6lwb25zZVwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqSBhdSBzaXRlICFcIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBiYWRQYXNzd29yZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbmUgY29ycmVzcG9uZCBhdXggaW5mb3JtYXRpb25zIHNhaXNpZXMuXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsIFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgZmFpbEJvdFRlc3Q6IFwiVW4gcHJvYmzDqG1lIGEgw6l0w6kgcmVuY29udHLDqSBkdXJhbnQgdm90cmUgaW5zY3JpcHRpb24uIEVuIGNhcyBkZSBkaWZmaWN1bHTDqSwgbidow6lzaXRleiBwYXMgY29udGFjdGVyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBmYWlsQm90VGVzdExvZzogXCJVbmUgaW5zY3JpcHRpb24gYSDDqXTDqSBibG9xdcOpZSwgcGFyY2UgcXVlIGxlIGNoYW1wIGVtYWlsMiDDqXRhaXQgcmVuc2VpZ27DqSBhdmVjIDogXCIsXG4gICAgZm9ybXNFbWFpbExhYmVsOiBcIkUtbWFpbCA6XCIsXG4gICAgZm9ybXNFbWFpbFBsYWNlaG9sZGVyOiBcIlZvdHJlIGFkcmVzc2UgZS1tYWlsXCIsXG4gICAgZm9ybXNFbWFpbDJQbGFjZWhvbGRlcjogXCJTaSB2b3VzIHZveWV6IGNlIGNoYW1wLCBsYWlzc2V6LWxlIHZpZGVcIiwvL2NoYW1wIHF1aSBuZSBkZXZyYWl0IHBhcyDDqnRyZSB2aXNpYmxlIHBhciBkZXMgaHVtYWluc1xuICAgIGZvcm1zQ0dVT2tMYWJlbDogXCJKJ2FjY2VwdGUgPGEgaHJlZj0jbGluayB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgcmVsPVxcXCJub29wZW5lclxcXCIgdGl0bGU9XFxcIsOAIGxpcmUgOilcXFwiPmxlcyBDb25kaXRpb25zIEfDqW7DqXJhbGUgZCdVdGlsaXNhdGlvbjwvYT4gZHUgc2l0ZSAocmVxdWlzKS5cIixcbiAgICBmb3Jtc1N1Ym1pdFR4dDogXCJKZSBtJ2Fib25uZSAhXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgXFxcInBhcnJhaW5cXFwiIGEgYmllbiDDqXTDqSB0cm91dsOpLiBDZXR0ZSBwZXJzb25uZSBzZXJhIGF2ZXJ0aWUgcXVlIHZvdXMgbCdhdmV6IGTDqXNpZ27DqWUuXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiRMOpc29sw6kgbWFpcyBhdWN1biB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNlIGNvZGUgLyBlLW1haWwgZGUgcGFycmFpbmFnZSA6KFwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVscyA6IFwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NVc2VyTmJHb2RDaGlsZHM6IFwiVm9pY2kgbGVzICNOQiB1dGlsaXNhdGV1cihzKSBpbnNjcml0KHMpIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIgOiBcIixcbiAgICBpbmZvc1VzZXJOb0dvZGNoaWxkczogXCJQb3VyIGwnaW5zdGFudCwgYXVjdW5lIHBlcnNvbm5lIG5lIHMnZXN0IGluc2NyaXRlLCBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiLlwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBhIGV4cGlyw6kuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCAqVElNSU5HKiAhXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjxicj5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLjwvcD48cD5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuU2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy5cXG5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlLW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+Ljxicj5FbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb25cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtUeHQgOiBcIlZhbGlkZXIgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0IEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkJ8OqdHJlIGVudm95w6kgw6Agdm90cmUgYWRyZXNzZSBlLW1haWwgKCNFTUFJTCkuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgITxicj48YnI+U2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIDxiPkVNQUlMPC9iPi48YnI+PGJyPkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIDxiPkVNQUlMPC9iPiDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyA8Yj5wb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT48L2I+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuPGJyPjxicj5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIGNpLWRlc3NvdXMuPGJyPjxicj7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuXFxuXFxuUG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBzdWl2YW50IDogTElOS19VUkxcXG5cXG7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgdW4gc2VydmV1ciBTTVRQIHZhbGlkZS5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiTWVyY2kgZCdhY2NlcHRlciBsZXMgQ0dVIHBvdXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGNvbXB0ZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSBwb3V2b2lyIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBub3V2ZWF1IGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgbGUgcHJlc3NlLXBhcGllciBkZSB2b3RyZSBvcmRpbmF0ZXVyIChvdSBtb2JpbGUpLiBWb3VzIHBvdXZleiBsZSBcXFwiY29sbGVyXFxcIiBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgc2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0OiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJEw6lzb2zDqSBtYWlzIGlsIHkgYSBldSB0cm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdGV6IG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLiBWb3VzIHBvdXZleiB2b3VzIHkgY29ubmVjdGVyIDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBjb21wbMOpdGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgdm90cmUgYWJvbm5lbWVudCBjaS1kZXNzb3VzLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIuKAplwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxuXG4gICAgLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4gICAgLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG4gICAgc3RhdGljIGdldFBhc3N3b3JkIChuYkNhck1pbiwgbmJDYXJNYXgpXG4gICAge1xuICAgICAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgICAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgICAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgICAgICB9XG4gICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICByZXR1cm4gcGFzc3dvcmQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBsaWVucyBkZSBsJ2ludGVyZmFjZVxuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9uc1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIsIHRpdGxlOlwiQWNjw6lkZXIgb3UgY3LDqWV6IHZvdHJlIGNvbXB0ZSBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiLCB0aXRsZTpcIkVuIHNhdm9pciArIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiLCB0aXRsZTpcIlBhZ2UgZCdhY2N1ZWlsXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkxlIGJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiwgdGl0bGU6XCJRdWkgYSBjcsOpw6kgV2lraUxlcm5pID8gUXVlbHMgc29udCB2b3MgZHJvaXRzID9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiLCB0aXRsZTpcIlZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZTogXCJhZG1pbi5odG1sXCIsXG4gICAgY2d1UGFnZTogXCJDR1YtQ0dVLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLCAgICBcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2VUeHQgOiBcIk1hIHBhZ2UgZCdhY2N1ZWlsLlwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgLyogVGV4dGVzIChnw6luw6lyYWwpICovXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbiAgICBsaWNlbmNlVHh0OiBcIkBjb3B5bGVmdCBMZSBjb250ZW51IGRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgP1xcXCI+ZXN0IGxpYnJlPC9hPiBldCB2b3VzIGVzdCBvZmZlcnQgc2FucyBwdWJsaWNpdMOpLiBWb3VzIHBvdXZleiA8YSBocmVmPVxcXCIvcGFydGljaXBlci1maW5hbmNlbWVudC5odG1sXFxcIiB0aXRsZT1cXFwiRmluYW5jZW1lbnQgcGFydGljaXBhdGlmIGF2ZWMgY29udHJlLXBhcnRpZXNcXFwiPnBhcnRpY2lwZXIgw6Agc29uIGZpbmFuY2VtZW50IGVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgLyogUGFnZSBkJ2FjY3VlaWwgKi9cbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiPGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+Ljxicj5Wb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzLCBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLjxicj5EZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgPGI+ZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgY3VsdHVyZSBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBqYXJkaW48L2I+LlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIjxiPlBhcyBkZSBmYWl0cyBhbHRlcm5hdGlmczwvYj4sIHRvdXMgbGVzIGNvbnRlbnVzIHNvbnQgPGI+c291cmPDqXMgcGFyIGRlcyBhcnRpY2xlcyBXaWtpcMOpZGlhPC9iPi48YnI+RXQgdG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwdWJsacOpIHN1ciBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzIHN1ciBjZSBzdWpldFxcXCI+c29udCBwYXJ0YWfDqXMgc291cyBsaWNlbmNlcyBsaWJyZXM8L2E+Ljxicj5MZSB0b3V0IHNhbnMgcHVibGljaXTDqSwgbmkgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzLjxicj48Yj5TdXIgV2lraUxlcm5pLCB2b3VzIGN1bHRpdmV6IHZvdHJlIGphcmRpbiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjwvYj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSA/XCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogIFwiVGVzdGV6IFdpa2lMZXJuaVwiLFxuICAgIGhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZTogIFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIC8qIFBhZ2UgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuLi4gKi8gICBcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIldpa2lMZXJuaSA6IHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiPHA+PGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgcXVlbHF1ZSBjaG9zZSBkZSBub3V2ZWF1PC9iPjxicj5TaSBkZXNzb3VzIGxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4gVm91cyBwb3V2ZXogYXVzc2kgPGEgaHJlZj0nL3F1aXpzL3RoZW1lcy5odG1sJz5wYXJjb3VyaXIgbGUgc2l0ZSBwYXIgdGjDqG1lcyBvdSBtb3RzLWNsw6lzPC9hPi48L3A+XCIsXG4gICAgLyogUGxhbiBkdSBzaXRlLCBsaXN0ZSBkZXMgdGFncyAqLyAgIFxuICAgIHRhZ0xpc3RUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBkZXMgYXJ0aWNsZXMgZXQgcXVpenMgc3VyIGRlIG5vbWJyZXV4IHRow6htZXMgIVwiLFxuICAgIHRhZ0xpc3RNZXRhRGVzYzogXCJXaWtpTGVybmkgOiBkw6ljb3V2cmlyIGxlcyBkaWZmw6lyZW50cyB0aMOobWVzIGFib3Jkw6lzIHBhciBXaWtpTGVybmkuIElueGV4IGR1IHNpdGUuXCIsXG4gICAgdGFnTGlzdEludHJvOiBcIjxoMz5BdmVjIFdpa2lMZXJuaSwgZGV2ZW5leiBmb3J0IGVuIHRow6htZXMuLi4gT3VpIG1haXMgcXVlbHMgdGjDqG1lcyA/IDopPC9oMz48YmxvY2txdW90ZT5BcmlzdG90ZeKArzogwqvigK9M4oCZaG9tbWUgYSBuYXR1cmVsbGVtZW50IGxhIHBhc3Npb24gZGUgY29ubmHDrnRyZeKApuKAr8K7PC9ibG9ja3F1b3RlPlwiLFxuICAgIC8qIFBhZ2UgcXVpenMgKi9cbiAgICBhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQ6IFwiUmVsaXJlXCIsXG4gICAgcXVpekVsZW1lbnRMaW5rc0ludHJvOiBcIkVuIHNhdm9pciBwbHVzXCIsXG4gICAgcXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZTogXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5p4oCvP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIjxwPkxlIHByaW5jaXBlIGVzdCBzaW1wbGXigK86IDxiPnZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpPC9iPi4gUHVpcyB2b3VzIDxiPmFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZTwvYj4uIFN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgPGI+dW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXM8L2I+IGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gQ+KAmWVzdCB0b3Vqb3VycyA8Yj5sZSBjb250ZW51IGRlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pPC9iPiBjb25jZXJuYW50IGxlcyDCq+KAr2Jvbm5lc+KAr8K7IHLDqXBvbnNlcy4gQ+KAmWVzdCB1bmUgZmHDp29uIGRlIHRlc3RlciDDoCBsYSBmb2lzIHZvdHJlIGNhcGFjaXTDqSBk4oCZYXR0ZW50aW9uIGV0IHZvdHJlIG3DqW1vaXJlLiBMZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG7igJlow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPC9wPjxwPjxiPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZOKAmWF1dHJlcyBzb2x1dGlvbnMgcG91ciBhbcOpbGlvcmVyIHZvdHJlIGN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4uIFBvdXIgZW4gc2F2b2lyIHBsdXMsIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBleHBsYW5hdGlvbkVsZW1lbnRUeHQ6IFwiPHA+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBkZSA8Yj5yZWNldm9pciBwYXIgZS1tYWlsIMOgIGxhIGZyw6lxdWVuY2UgY2hvaXNpZSwgZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXM8L2I+IGV0IHBvcnRhbnQgc3VyIGRlcyBzdWpldHMgdHLDqHMgdmFyacOpcyBkZSA8Yj5jdWx0dXJlIGfDqW7DqXJhbGU8L2I+IChhcnRzLCBoaXN0b2lyZSwgbGl0dMOpcmF0dXJlLCBzY2llbmNlcywgZXRjLikuPC9wPjxwPkNlcyBhcnRpY2xlcyBzb250IGJhc8OpcyBzdXIgPGI+dW5lIG91IHBsdXNpZXVycyBwYWdlcyBkZSBXaWtpcMOpZGlhPC9iPiAoZm91cm5pZXMgZW4gbGllbiksIGRvbnQgPGI+aWxzIGV4dHJhaWVudCBjZXJ0YWluZXMgaW5mb3JtYXRpb25zPC9iPi48L3A+PHA+Q2hhcXVlIHPDqXJpZSBk4oCZYXJ0aWNsZXMgZXN0IDxiPnN1aXZpZSBk4oCZdW4gcXVpejwvYj4gcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPC9wPjxwPjxiPlZvdXMgYXBwcmVuZXogYWluc2kgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+IHRyw6hzIHNpbXBsZW1lbnQuPC9wPlwiLFxuICAgIC8qIEF1dHJlcyAqL1xuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICB0d2l0dGVyQWNjb3VudDogXCJXaWtpTGVybmlcIixcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG59OyIsIi8vIC0tIEdFU1RJT04gRFUgRk9STVVMQUlSRSBQRVJNRVRUQU5UIERFIFNBSVNJUiAvIMOJRElURVIgTEVTIFFVSVpTIEVUIExFVVJTIETDiVBFTkRBTkNFUyAoTElFTlMsIElNQUdFUywgVEFHUywgRVRDLilcblxuLy8vIFbDqXJpZmllIHF1ZSBsJ3V0aWxpc2F0ZXVyIGVzdCBiaWVuIGNvbm5lY3TDqSwgYSBsZSBib24gc3RhdHV0IGV0IGxlIHJlZGlyaWdlIHZlcnMgbGUgZm9ybXVsYWlyZSBkJ2luc2NyaXB0aW9uIHNpIGNlIG4nZXN0IHBhcyBsZSBjYXMuXG4vLy8gU2kgYydlc3Qgb2ssIHByb3Bvc2UgdW4gbW90ZXVyIGRlIHJlY2hlcmNoZSBwZXJtZXR0YW50IGRlIGNoZXJjaGVyIHVuIHF1aXpcbi8vLyBTaSB1biBpZCBlc3QgcGFzc8OpIHBhciBsJ3VybCBvbiBhZmZpY2hlIGxlcyBpbmZvcm1hdGlvbnMgZHUgcXVpeiBkYW5zIHVuIGZvcm11bGFpcmUgcGVybWV0dGFudCBkZSBsJ8OpZGl0ZXIvc3VwcHJpbWVyIGF2ZWMgdW5lIGxpc3RlIGRlcyDDqWzDqW1lbnRzIGxpw6lzIChsaWVucywgaWxsdXN0cmF0aW9ucywgcXVlc3Rpb25zLi4uKSBwb3V2YW50IGV1eC1tw6ptZXMgw6p0cmUgw6lkaXTDqXMvc3VwcHJpbcOpcy5cbi8vLyBTaSBsZSBub21icmUgbWF4IGNvbmZpZ3Vyw6kgcG91ciBjaGFjdW4gZGUgc2VzIMOpbMOpbWVudHMgbidlc3QgcGFzIGF0dGVpbnQsIGlsIGVzdCBhdXNzaSBwcm9wb3PDqSBkJ2Fqb3V0ZXIgdW4gbm91dmVsIMOpbMOpbWVudC5cbi8vLyBTaSBwYXMgZCdpZCBwYXNzw6kgcGFyIGwndXJsLCBvbiBhZmZpY2hlIHVuIGZvcm11bGFpcmUgdmlkZSBwZXJtZXR0YW50IGRlIHNhaXNpciB1biBub3V2ZWF1IHF1aXouXG5cbi8vIEZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24gOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiKTtcbmNvbnN0IGNvbmZpZ0lsbHVzdHJhdGlvbnMgPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL2lsbHVzdHJhdGlvbnMuanNcIik7XG5jb25zdCBjb25maWdMaW5rcyA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvbGlua3MuanNcIik7XG5jb25zdCBjb25maWdRdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvcXVlc3Rpb25uYWlyZXMuanNcIik7XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gRm9uY3Rpb25zIDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZW1weUFuZEhpZGVGb3JtLCBnZXREYXRhc0Zyb21JbnB1dHMsIHNldEF0dHJpYnV0ZXNUb0lucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBkYXRlRm9ybWF0LCBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB7IGFkZE9rTWVzc2FnZSwgZGVsZXRlQnRuVHh0LCBzZXJ2ZXJFcnJvciwgdXBkYXRlQnRuVHh0IH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IGFkZElsbHVzdHJhdGlvblR4dCwgZGVmYXVsdEFsdCwgaW50cm9Ob0lsbHVzdHJhdGlvbiwgaW50cm9UaXRsZUZvcklsbHVzdHJhdGlvbiB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9pbGx1c3RyYXRpb25cIik7XG5jb25zdCB7IGFkZExpbmtUeHQsIGRlZmF1bHRWYWx1ZUZvckxpbmssIGludHJvTm9MaW5rLCBpbnRyb1RpdGxlRm9yTGluayB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9saW5rXCIpO1xuY29uc3QgeyBhZGRRdWVzdGlvblR4dCwgaW50cm9Ob1F1ZXN0aW9uLCBpbnRyb1RpdGxlRm9yUXVlc3Rpb24gfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvcXVlc3Rpb25cIik7XG5jb25zdCB7IG5lZWRHcm91cElmUmFuaywgbmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZSwgbmV4dFF1ZXN0aW9ubmFpcmVzTGlzdCwgcXVlc3Rpb25uYWlyZU5lZWRCZUNvbXBsZXRlZCwgc2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhOb1Jlc3VsdCB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9xdWVzdGlvbm5haXJlXCIpO1xuY29uc3QgeyBuZWVkQmVDb25uZWN0ZWQgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGJ0bk5ld1F1ZXN0aW9ubmFpcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndhbnROZXdRdWVzdGlvbm5haXJlXCIpO1xuY29uc3QgYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByZXZpZXdRdWVzdGlvbm5haXJlXCIpO1xuY29uc3QgZGVsZXRlQ2hlY2tCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGV0ZU9rTGFiZWxcIik7XG5jb25zdCBkaXZDcmFzaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3Jhc2hcIik7XG5jb25zdCBkaXZJbGx1c3RyYXRpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbGx1c3RyYXRpb25zTGlzdFwiKTtcbmNvbnN0IGRpdkxpbmtzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsaW5rc0xpc3RcIik7XG5jb25zdCBkaXZNYWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UXVlc3Rpb25uYWlyZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVzTGlzdFwiKTtcbmNvbnN0IGRpdlF1ZXN0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25zTGlzdFwiKTtcbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IGRpdlNlYXJjaFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VhcmNoUmVzdWx0XCIpO1xuY29uc3QgZm9ybUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxpbmtzXCIpO1xuY29uc3QgZm9ybUlsbHVzdHJhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWxsdXN0cmF0aW9uc1wiKTtcbmNvbnN0IGZvcm1RdWVzdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25zXCIpO1xuY29uc3QgZm9ybVF1ZXN0aW9ubmFpcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVzXCIpO1xuY29uc3QgZm9ybVNlYXJjaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VhcmNoXCIpO1xuY29uc3QgaGVscENsYXNzaWZpY2F0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoZWxwQ2xhc3NpZmljYXRpb25cIik7XG5jb25zdCBoZWxwR3JvdXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlbHBHcm91cFwiKTtcbmNvbnN0IGhlbHBQdWJsaXNoaW5nQXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlbHBQdWJsaXNoaW5nQXRcIik7XG5jb25zdCBpbnB1dENsYXNzaWZpY2F0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjbGFzc2lmaWNhdGlvblwiKTtcbmNvbnN0IGlucHV0R3JvdXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdyb3VwXCIpO1xuY29uc3QgaW5wdXRSYW5rSW5Hcm91cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmFua0luR3JvdXBcIik7XG5cbi8vIFZpZGUgZXQgY2FjaGUgdG91cyBsZXMgZm9ybXVsYWlyZXMgYW5uZXhlcyBhdSBxdWVzdGlvbm5haXJlIDpcbmNvbnN0IGhpZGVBbGxGb3JtcyA9ICgpID0+XG57XG4gICAgZW1weUFuZEhpZGVGb3JtKGZvcm1MaW5rKTtcbiAgICBpZihkZWZhdWx0VmFsdWVGb3JMaW5rIT0wKVxuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFuY2hvclwiKS52YWx1ZT1kZWZhdWx0VmFsdWVGb3JMaW5rO1xuICAgIGVtcHlBbmRIaWRlRm9ybShmb3JtSWxsdXN0cmF0aW9uKTtcbiAgICBlbXB5QW5kSGlkZUZvcm0oZm9ybVF1ZXN0aW9uKTtcbn1cblxuLy8gQWZmaWNoZSBsZXMgZG9ubsOpZXMgZCd1biBsaWVuIGRhbnMgbGUgZm9ybXVsYWlyZSBhZGhvYyA6XG5jb25zdCBzaG93Rm9ybUxpbmtJbmZvcyA9IChMaW5rKSA9Plxue1xuICAgIC8vIE9uIGNvbW1lbmNlIHBhciBjYWNoZXIgZXQgdmlkZXIgdG91cyBsZXMgZm9ybXVsYWlyZXMgYW5uZXhlc1xuICAgIGhpZGVBbGxGb3JtcygpO1xuICAgIC8vIFB1aXMgb24gYWZmaWNoZSBjZWx1aSBjb25jZXJuw6lcbiAgICBmb3JtTGluay5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAvLyArIExlcyBjb250cmFpbnRlcyBkZSBjaGFtcCAmIHZhbGV1cnMgcGFyIGTDqWZhdXQgOlxuICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdMaW5rcy5MaW5rLCBmb3JtTGluayk7XG4gICAgZm9yKGxldCBkYXRhIGluIExpbmspXG4gICAge1xuICAgICAgICBpZihmb3JtTGluay5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIGZvcm1MaW5rLmVsZW1lbnRzW2RhdGFdLnZhbHVlPUxpbmtbZGF0YV07XG4gICAgfVxufVxuXG4vLyBBZmZpY2hlIGxlcyBpbmZvcyBjb25udWVzIGNvbmNlcm5hbnQgbGVzIGxpZW5zIGR1IHF1ZXN0aW9ubmFpcmUgYWZmaWNow6kgOlxuY29uc3Qgc2hvd0xpbmtJbmZvcyA9IChMaW5rcywgdG9rZW4pID0+XG57XG4gICAgYWRkRWxlbWVudChkaXZMaW5rcywgXCJoMlwiLCBpbnRyb1RpdGxlRm9yTGluayk7XG4gICAgbGV0IGxpc3RMaW5rcz1cIlwiO1xuICAgIGZvcihsZXQgaSBpbiBMaW5rcylcbiAgICAgICAgbGlzdExpbmtzKz1cIjxsaT48YSBocmVmPSdcIitMaW5rc1tpXS51cmwrXCInIHRhcmdldD0nX2JsYW5rJz5cIitMaW5rc1tpXS5hbmNob3IrXCI8L2E+PGJyPjxhIGhyZWY9JyN1cGRhdGVMaW5rXCIrTGlua3NbaV0uaWQrXCInIGlkPScjdXBkYXRlTGlua1wiK0xpbmtzW2ldLmlkK1wiJyBjbGFzcz0nYnV0dG9uJyA+XCIrdXBkYXRlQnRuVHh0K1wiPC9hPiA8YSBocmVmPScjZGVsZXRlTGlua1wiK0xpbmtzW2ldLmlkK1wiJyBpZD0nI2RlbGV0ZUxpbmtcIitMaW5rc1tpXS5pZCtcIicgY2xhc3M9J2J1dHRvbicgPlwiK2RlbGV0ZUJ0blR4dCtcIjwvYT48L2xpPlwiO1xuICAgIGlmKGxpc3RMaW5rcz09PVwiXCIpXG4gICAgICAgIGxpc3RMaW5rcz1cIjxsaT5cIitpbnRyb05vTGluaytcIjwvbGk+XCI7XG4gICAgYWRkRWxlbWVudChkaXZMaW5rcywgXCJ1bFwiLCBsaXN0TGlua3MsIFwiXCIsIFtdLCBcIlwiLCBmYWxzZSk7Ly8gISDDoCBpbnTDqWdyZXIgZCdhYm9yZCBkYW5zIGxlIERPTSBwb3VyIHBvdXZvaXIgYWpvdXRlciBsZXMgTGlzdGVuZXJzIGVuc3VpdGVcbiAgICBmb3IobGV0IGkgaW4gTGlua3MpXG4gICAge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiN1cGRhdGVMaW5rXCIrTGlua3NbaV0uaWQpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBzaG93Rm9ybUxpbmtJbmZvcyhMaW5rc1tpXSk7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI2xpbmtzXCIpO1xuICAgICAgICB9KTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjZGVsZXRlTGlua1wiK0xpbmtzW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgc2hvd0Zvcm1MaW5rSW5mb3MoTGlua3NbaV0pO1xuICAgICAgICAgICAgZm9ybUxpbmsuZWxlbWVudHNbXCJkZWxldGVPa1wiXS52YWx1ZT10cnVlO1xuICAgICAgICAgICAgc2VuZExpbmtGb3JtKHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmKExpbmtzLmxlbmd0aCA8IGNvbmZpZy5uYkxpbmtzTWF4IHx8IGNvbmZpZy5uYkxpbmtzTWF4ID09PSAwKVxuICAgIHtcbiAgICAgICAgbGV0IG5ld0J0bj1cIjxhIGhyZWY9JyNuZXdMaW5rJyBpZD0nbmV3TGluaycgY2xhc3M9J2J1dHRvbic+XCIrYWRkTGlua1R4dCtcIjwvYT5cIjtcbiAgICAgICAgYWRkRWxlbWVudChkaXZMaW5rcywgXCJwXCIsIG5ld0J0biwgXCJcIiwgW10sIHsgfSwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5ld0xpbmtcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgZm9ybUxpbmsuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBmb3JtTGluay5lbGVtZW50c1tcIlF1ZXN0aW9ubmFpcmVJZFwiXS52YWx1ZT1mb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tcImlkXCJdLnZhbHVlO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNsaW5rc1wiKTtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdMaW5rcywgZm9ybUxpbmspO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIEVudm9pIGRlcyBkb25uw6llcyBkJ3VuIGxpZW4uXG5jb25zdCBzZW5kTGlua0Zvcm0gPSAodG9rZW4pID0+XG57XG4gICAgY29uc3QgZGl2UmVzcG9uc2VMaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VMaW5rXCIpO1xuICAgIGRpdlJlc3BvbnNlTGluay5pbm5lckhUTUw9XCJcIjtcbiAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1MaW5rKTtcbiAgICBjb25zdCB4aHJMaW5rRGF0YXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKCFpc0VtcHR5KGRhdGFzLmRlbGV0ZU9rKSkpXG4gICAgICAgIHhockxpbmtEYXRhcy5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWdMaW5rcy5saW5rc1JvdXRlK2RhdGFzLmlkKTtcbiAgICBlbHNlIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSlcbiAgICAgICAgeGhyTGlua0RhdGFzLm9wZW4oXCJQVVRcIiwgYXBpVXJsK2NvbmZpZ0xpbmtzLmxpbmtzUm91dGUrZGF0YXMuaWQpO1xuICAgIGVsc2VcbiAgICAgICAgeGhyTGlua0RhdGFzLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdMaW5rcy5saW5rc1JvdXRlKTtcbiAgICB4aHJMaW5rRGF0YXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBpZiAoKHRoaXMuc3RhdHVzID09PSAyMDAgfHwgdGhpcy5zdGF0dXMgPT09IDIwMSkgJiYgcmVzcG9uc2UubWVzc2FnZSE9dW5kZWZpbmVkICYmIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmUhPXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHNob3dMaW5rSW5mb3MocmVzcG9uc2UucXVlc3Rpb25uYWlyZS5MaW5rcywgdG9rZW4pOy8vIGxlIHNlcnZldXIgcmV0b3VybmUgdW5lIHZlcnNpb24gYWN0dWFsaXPDqWUgZGUgbGEgbGlzdGUgZGVzIGxpZW5zXG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZMaW5rcywgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI2xpbmtzTGlzdFwiKTtcbiAgICAgICAgICAgICAgICBzaG93TmV4dFF1ZXN0aW9ubmFpcmVzKHRva2VuKTsvLyBwZXV0IGF2b2lyIMOpdm9sdcOpIHN1aXZhbnQgY2UgcXVpIHMnZXN0IHBhc3PDqVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZUxpbmssIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlTGluaywgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgeGhyTGlua0RhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgIHhockxpbmtEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit0b2tlbik7XG4gICAgeGhyTGlua0RhdGFzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbn1cblxuLy8gQWZmaWNoZSBsZXMgZG9ubsOpZXMgZCd1bmUgaWxsdXN0cmF0aW9uIGRhbnMgbGUgZm9ybXVsYWlyZSBhZGhvYyA6XG5jb25zdCBzaG93Rm9ybUlsbHVzdHJhdGlvbkluZm9zID0gKElsbHVzdHJhdGlvbikgPT5cbntcbiAgICAvLyBPbiBjb21tZW5jZSBwYXIgY2FjaGVyIGV0IHZpZGVyIHRvdXMgbGVzIGZvcm11bGFpcmVzIGFubmV4ZXNcbiAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAvLyBQdWlzIG9uIGFmZmljaGUgY2VsdWkgY29uY2VybsOpXG4gICAgZm9ybUlsbHVzdHJhdGlvbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAvLyArIExlcyBjb250cmFpbnRlcyBkZSBjaGFtcCAmIHZhbGV1cnMgcGFyIGTDqWZhdXRcbiAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnSWxsdXN0cmF0aW9ucy5JbGx1c3RyYXRpb24sIGZvcm1JbGx1c3RyYXRpb24pOyAgICAgICAgICAgICAgXG4gICAgLy8gTWFpcyBsZSBjaGFtcCBmaWxlIG4nZXN0IHBsdXMgcmVxdWlzLCBxdWFuZCB1biBmaWNoaWVyIGV4aXN0ZSBkw6lqw6BcbiAgICBmb3JtSWxsdXN0cmF0aW9uLmVsZW1lbnRzW1wiaW1hZ2VcIl0ucmVtb3ZlQXR0cmlidXRlKFwicmVxdWlyZWRcIik7XG4gICAgZm9yKGxldCBkYXRhIGluIElsbHVzdHJhdGlvbilcbiAgICB7XG4gICAgICAgIGlmKGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbZGF0YV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICBmb3JtSWxsdXN0cmF0aW9uLmVsZW1lbnRzW2RhdGFdLnZhbHVlPUlsbHVzdHJhdGlvbltkYXRhXTtcbiAgICB9XG59XG5cbi8vIEFmZmljaGUgbGVzIGluZm9zIGNvbm51ZXMgY29uY2VybmFudCBsZXMgaWxsdXN0cmF0aW9ucyBkdSBxdWVzdGlvbm5haXJlIGFmZmljaMOpIDpcbmNvbnN0IHNob3dJbGx1c3RyYXRpb25JbmZvcyA9IChJbGx1c3RyYXRpb25zLCB0b2tlbikgPT5cbntcbiAgICBhZGRFbGVtZW50KGRpdklsbHVzdHJhdGlvbnMsIFwiaDJcIiwgaW50cm9UaXRsZUZvcklsbHVzdHJhdGlvbik7XG4gICAgbGV0IGxpc3RJbGx1c3RyYXRpb25zPVwiXCI7XG4gICAgZm9yKGxldCBpIGluIElsbHVzdHJhdGlvbnMpXG4gICAgICAgIGxpc3RJbGx1c3RyYXRpb25zKz1cIjxsaT48YSBocmVmPSdcIitjb25maWdUZW1wbGF0ZS5pbGx1c3RyYXRpb25EaXIrSWxsdXN0cmF0aW9uc1tpXS51cmwrXCInIHRhcmdldD0nX2JsYW5rJz48aW1nIHNyYz0nXCIrY29uZmlnVGVtcGxhdGUuaWxsdXN0cmF0aW9uRGlyK0lsbHVzdHJhdGlvbnNbaV0udXJsK1wiJyBhbHQ9J1wiK2RlZmF1bHRBbHQrXCInIHN0eWxlPSdtYXgtaGVpZ2h0OjE1MHB4Jz48L2E+PGJyPjxhIGhyZWY9JyN1cGRhdGVJbGx1c3RyYXRpb25cIitJbGx1c3RyYXRpb25zW2ldLmlkK1wiJyBpZD0nI3VwZGF0ZUlsbHVzdHJhdGlvblwiK0lsbHVzdHJhdGlvbnNbaV0uaWQrXCInIGNsYXNzPSdidXR0b24nPlwiK3VwZGF0ZUJ0blR4dCtcIjwvYT4gPGEgaHJlZj0nI2RlbGV0ZUlsbHVzdHJhdGlvblwiK0lsbHVzdHJhdGlvbnNbaV0uaWQrXCInIGlkPScjZGVsZXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCtcIicgY2xhc3M9J2J1dHRvbic+XCIrZGVsZXRlQnRuVHh0K1wiPC9hPjwvbGk+XCI7XG4gICAgaWYobGlzdElsbHVzdHJhdGlvbnMgPT09IFwiXCIpXG4gICAgICAgIGxpc3RJbGx1c3RyYXRpb25zPVwiPGxpPlwiK2ludHJvTm9JbGx1c3RyYXRpb24rXCI8L2xpPlwiO1xuICAgIGFkZEVsZW1lbnQoZGl2SWxsdXN0cmF0aW9ucywgXCJ1bFwiLCBsaXN0SWxsdXN0cmF0aW9ucywgXCJcIiwgW10sIFwiXCIsIGZhbHNlKTsvLyAhIMOgIGludMOpZ3JlciBkJ2Fib3JkIGRhbnMgbGUgRE9NIHBvdXIgcG91dm9pciBham91dGVyIGxlcyBMaXN0ZW5lcnMgZW5zdWl0ZVxuICAgIGZvcihsZXQgaSBpbiBJbGx1c3RyYXRpb25zKVxuICAgIHtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjdXBkYXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNob3dGb3JtSWxsdXN0cmF0aW9uSW5mb3MoSWxsdXN0cmF0aW9uc1tpXSk7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI2lsbHVzdHJhdGlvbnNcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiNkZWxldGVJbGx1c3RyYXRpb25cIitJbGx1c3RyYXRpb25zW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgc2hvd0Zvcm1JbGx1c3RyYXRpb25JbmZvcyhJbGx1c3RyYXRpb25zW2ldKTtcbiAgICAgICAgICAgIGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbXCJkZWxldGVPa1wiXS52YWx1ZT10cnVlO1xuICAgICAgICAgICAgc2VuZElsbHVzdHJhdGlvbkZvcm0odG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYoSWxsdXN0cmF0aW9ucy5sZW5ndGggPCBjb25maWcubmJJbGx1c3RyYXRpb25zTWF4IHx8IGNvbmZpZy5uYklsbHVzdHJhdGlvbnNNYXggPT09IDApXG4gICAge1xuICAgICAgICBsZXQgbmV3QnRuPVwiPGEgaHJlZj0nI25ld0lsbHVzdHJhdGlvbicgaWQ9J25ld0lsbHVzdHJhdGlvbicgY2xhc3M9J2J1dHRvbic+XCIrYWRkSWxsdXN0cmF0aW9uVHh0K1wiPC9hPlwiO1xuICAgICAgICBhZGRFbGVtZW50KGRpdklsbHVzdHJhdGlvbnMsIFwicFwiLCBuZXdCdG4sIFwiXCIsIFtdLCB7IH0sIGZhbHNlKTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXdJbGx1c3RyYXRpb25cIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgZm9ybUlsbHVzdHJhdGlvbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbXCJRdWVzdGlvbm5haXJlSWRcIl0udmFsdWU9Zm9ybVF1ZXN0aW9ubmFpcmUuZWxlbWVudHNbXCJpZFwiXS52YWx1ZTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjaWxsdXN0cmF0aW9uc1wiKTtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdJbGx1c3RyYXRpb25zLCBmb3JtSWxsdXN0cmF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBFbnZvaSBkZXMgZG9ubsOpZXMgZCd1bmUgaWxsdXN0cmF0aW9uLlxuY29uc3Qgc2VuZElsbHVzdHJhdGlvbkZvcm0gPSAodG9rZW4pID0+XG57XG4gICAgY29uc3QgZGl2UmVzcG9uc2VJbGx1c3RyYXRpb249ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZUlsbHVzdHJhdGlvblwiKTtcbiAgICBkaXZSZXNwb25zZUlsbHVzdHJhdGlvbi5pbm5lckhUTUw9XCJcIjtcbiAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1JbGx1c3RyYXRpb24pO1xuICAgIGxldCBkYXRhc1dpdGhGaWxlcz1uZXcgRm9ybURhdGEoZm9ybUlsbHVzdHJhdGlvbik7IC8vIGNhciBpbCBtZSBtYW5xdWUgbGVzIGluZm9ybWF0aW9ucyBkdSBmaWNoaWVyIGF2ZWMgbGEgZm9uY3Rpb24gZ2V0RGF0YXNGcm9tSW5wdXRzXG4gICAgY29uc3QgeGhySWxsdXN0cmF0aW9uRGF0YXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKCFpc0VtcHR5KGRhdGFzLmRlbGV0ZU9rKSkpXG4gICAgICAgIHhocklsbHVzdHJhdGlvbkRhdGFzLm9wZW4oXCJERUxFVEVcIiwgYXBpVXJsK2NvbmZpZ0lsbHVzdHJhdGlvbnMuaWxsdXN0cmF0aW9uc1JvdXRlK2RhdGFzLmlkKTtcbiAgICBlbHNlIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSlcbiAgICAgICAgeGhySWxsdXN0cmF0aW9uRGF0YXMub3BlbihcIlBVVFwiLCBhcGlVcmwrY29uZmlnSWxsdXN0cmF0aW9ucy5pbGx1c3RyYXRpb25zUm91dGUrZGF0YXMuaWQpO1xuICAgIGVsc2VcbiAgICAgICAgeGhySWxsdXN0cmF0aW9uRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ0lsbHVzdHJhdGlvbnMuaWxsdXN0cmF0aW9uc1JvdXRlKTtcbiAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gMjAxKSAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQgJiYgcmVzcG9uc2UucXVlc3Rpb25uYWlyZSE9dW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgc2hvd0lsbHVzdHJhdGlvbkluZm9zKHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmUuSWxsdXN0cmF0aW9ucywgdG9rZW4pOy8vIGxlIHNlcnZldXIgcmV0b3VybmUgdW5lIHZlcnNpb24gYWN0dWFsaXPDqWUgZGUgbGEgbGlzdGUgZGVzIGxpZW5zXG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZJbGx1c3RyYXRpb25zLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjaWxsdXN0cmF0aW9uc0xpc3RcIik7XG4gICAgICAgICAgICAgICAgc2hvd05leHRRdWVzdGlvbm5haXJlcyh0b2tlbik7Ly8gcGV1dCBhdm9pciDDqXZvbHXDqSBzdWl2YW50IGNlIHF1aSBzJ2VzdCBwYXNzw6lcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2VJbGx1c3RyYXRpb24sIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlSWxsdXN0cmF0aW9uLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit0b2tlbik7XG4gICAgeGhySWxsdXN0cmF0aW9uRGF0YXMuc2VuZChkYXRhc1dpdGhGaWxlcyk7XG59XG5cbi8vIEFmZmljaGUgbGVzIGRvbm7DqWVzIGQndW5lIHF1ZXN0aW9uICsgc2VzIHLDqXBvbnNlcyBwb3NzaWJsZXMgZGFucyBsZSBmb3JtdWxhaXJlIGFkaG9jXG5jb25zdCBzaG93Rm9ybVF1ZXN0aW9uSW5mb3MgPSAoUXVlc3Rpb24pID0+XG57XG4gICAgLy8gT24gY29tbWVuY2UgcGFyIGNhY2hlciBldCB2aWRlciB0b3VzIGxlcyBmb3JtdWxhaXJlcyBhbm5leGVzXG4gICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgLy8gUHVpcyBvbiBhZmZpY2hlIGNlbHVpIGNvbmNlcm7DqVxuICAgIGZvcm1RdWVzdGlvbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICBmb3IobGV0IGRhdGEgaW4gUXVlc3Rpb24uUXVlc3Rpb24pXG4gICAge1xuICAgICAgICBpZihmb3JtUXVlc3Rpb24uZWxlbWVudHNbZGF0YV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbZGF0YV0udmFsdWU9UXVlc3Rpb24uUXVlc3Rpb25bZGF0YV07XG4gICAgfVxuICAgIC8vICsgTGVzIGNvbnRyYWludGVzIGRlIGNoYW1wICYgbGVzIHZhbGV1cnMgcGFyIGTDqWZhdXRcbiAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnUXVlc3Rpb25uYWlyZXMuUXVlc3Rpb24sIGZvcm1RdWVzdGlvbik7ICAgICAgICAgICAgICBcbiAgICBmb3IobGV0IGRhdGEgaW4gUXVlc3Rpb24uQ2hvaWNlcylcbiAgICB7XG4gICAgICAgIGlmKGZvcm1RdWVzdGlvbi5lbGVtZW50c1tcImNob2ljZVRleHRcIitkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiY2hvaWNlVGV4dFwiK2RhdGFdLnZhbHVlPVF1ZXN0aW9uLkNob2ljZXNbZGF0YV0udGV4dDtcbiAgICAgICAgICAgIGlmKFF1ZXN0aW9uLkNob2ljZXNbZGF0YV0uaXNDb3JyZWN0PT10cnVlKVxuICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbi5lbGVtZW50c1tcImNob2ljZUlzQ29ycmVjdFwiK2RhdGFdLmNoZWNrZWQ9dHJ1ZTtcbiAgICAgICAgICAgIGZvcm1RdWVzdGlvbi5lbGVtZW50c1tcImlkQ2hvaWNlXCIrZGF0YV0udmFsdWU9UXVlc3Rpb24uQ2hvaWNlc1tkYXRhXS5pZDtcbiAgICAgICAgfSAgICAgICAgICAgICAgICBcbiAgICB9XG59XG5cbi8vIEFmZmljaGUgbGVzIGluZm9zIGRlcyBxdWVzdGlvbnMgZHUgcXVpeiBhZmZpY2jDqSA6XG5jb25zdCBzaG93UXVlc3Rpb25JbmZvcyA9IChRdWVzdGlvbnMsIHRva2VuKSA9Plxue1xuICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25zLCBcImgyXCIsIGludHJvVGl0bGVGb3JRdWVzdGlvbik7XG4gICAgbGV0IGxpc3RRdWVzdGlvbnM9XCJcIjtcbiAgICBmb3IobGV0IGkgaW4gUXVlc3Rpb25zKVxuICAgICAgICBsaXN0UXVlc3Rpb25zKz1cIjxsaT5cIitRdWVzdGlvbnNbaV0uUXVlc3Rpb24ucmFuaytcIiAtIFwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi50ZXh0K1wiPGJyPjxhIGhyZWY9JyN1cGRhdGVRdWVzdGlvblwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5pZCtcIicgaWQ9JyN1cGRhdGVRdWVzdGlvblwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5pZCtcIicgY2xhc3M9J2J1dHRvbic+XCIrdXBkYXRlQnRuVHh0K1wiPC9hPiA8YSBocmVmPScjZGVsZXRlUXVlc3Rpb25cIitRdWVzdGlvbnNbaV0uUXVlc3Rpb24uaWQrXCInIGlkPScjZGVsZXRlUXVlc3Rpb25cIitRdWVzdGlvbnNbaV0uUXVlc3Rpb24uaWQrXCInIGNsYXNzPSdidXR0b24nPlwiK2RlbGV0ZUJ0blR4dCtcIjwvYT48L2xpPlwiO1xuICAgIGlmKGxpc3RRdWVzdGlvbnMgPT09IFwiXCIpXG4gICAgICAgIGxpc3RRdWVzdGlvbnM9XCI8bGk+XCIraW50cm9Ob1F1ZXN0aW9uK1wiPC9saT5cIjtcbiAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ucywgXCJ1bFwiLCBsaXN0UXVlc3Rpb25zLCBcIlwiLCBbXSwgXCJcIiwgZmFsc2UpOy8vIMOgIGludMOpZ3JlciBkJ2Fib3JkIGRhbnMgbGUgRE9NIHBvdXIgcG91dm9pciBham91dGVyIGxlcyBMaXN0ZW5lcnMgZW5zdWl0ZVxuICAgIGZvcihsZXQgaSBpbiBRdWVzdGlvbnMpXG4gICAge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiN1cGRhdGVRdWVzdGlvblwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNob3dGb3JtUXVlc3Rpb25JbmZvcyhRdWVzdGlvbnNbaV0pO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNxdWVzdGlvbnNcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiNkZWxldGVRdWVzdGlvblwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHNob3dGb3JtUXVlc3Rpb25JbmZvcyhRdWVzdGlvbnNbaV0pO1xuICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiZGVsZXRlT2tcIl0udmFsdWU9dHJ1ZTtcbiAgICAgICAgICAgIHNlbmRRdWVzdGlvbkZvcm0odG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYoUXVlc3Rpb25zLmxlbmd0aCA8IGNvbmZpZy5uYlF1ZXN0aW9uc01heCB8fCBjb25maWcubmJRdWVzdGlvbnNNYXggPT09IDApXG4gICAge1xuICAgICAgICBsZXQgbmV3QnRuPVwiPGEgaHJlZj0nI25ld1F1ZXN0aW9uJyBpZD0nbmV3UXVlc3Rpb24nIGNsYXNzPSdidXR0b24nPlwiK2FkZFF1ZXN0aW9uVHh0K1wiPC9hPlwiO1xuICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ucywgXCJwXCIsIG5ld0J0biwgXCJcIiwgW10sIHsgfSwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5ld1F1ZXN0aW9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgIGZvcm1RdWVzdGlvbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGZvcm1RdWVzdGlvbi5lbGVtZW50c1tcIlF1ZXN0aW9ubmFpcmVJZFwiXS52YWx1ZT1mb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tcImlkXCJdLnZhbHVlO1xuICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wicmFua1wiXS52YWx1ZT0oUXVlc3Rpb25zLmxlbmd0aD09PTApID8gY29uZmlnUXVlc3Rpb25uYWlyZXMuUXVlc3Rpb24ucmFuay5kZWZhdWx0VmFsdWUgOiBRdWVzdGlvbnMubGVuZ3RoKzE7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3F1ZXN0aW9uc1wiKTtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdRdWVzdGlvbm5haXJlcy5RdWVzdGlvbiwgZm9ybVF1ZXN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBFbnZvaSBkZXMgZG9ubsOpZXMgZCd1bmUgcXVlc3Rpb24gZXQgZGUgc2VzIHLDqXBvbnNlLiBQZXV0IMOqdHJlIGfDqW7DqXLDqSBwYXIgbGUgYm91dG9uIHN1Ym1pdCBvdSBwYXIgbGUgbGllbiBcInN1cHByaW1lclwiLlxuY29uc3Qgc2VuZFF1ZXN0aW9uRm9ybSA9ICh0b2tlbikgPT5cbntcbiAgICBjb25zdCBkaXZSZXNwb25zZVF1ZXN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VRdWVzdGlvblwiKTtcbiAgICBkaXZSZXNwb25zZVF1ZXN0aW9uLmlubmVySFRNTD1cIlwiO1xuICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybVF1ZXN0aW9uKTtcbiAgICBjb25zdCB4aHJRdWVzdGlvbkRhdGFzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgaWYoIWlzRW1wdHkoZGF0YXMuaWQpICYmICghaXNFbXB0eShkYXRhcy5kZWxldGVPaykpKVxuICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLm9wZW4oXCJERUxFVEVcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnF1ZXN0aW9uc1JvdXRlK2RhdGFzLmlkKTtcbiAgICBlbHNlIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSlcbiAgICAgICAgeGhyUXVlc3Rpb25EYXRhcy5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5xdWVzdGlvbnNSb3V0ZStkYXRhcy5pZCk7Ly8gbWlzZSDDoCBqb3VyIGQndW5lIHF1ZXN0aW9uXG4gICAgZWxzZVxuICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5xdWVzdGlvbnNSb3V0ZSk7Ly8gbm91dmVsbGUgcXVlc3Rpb25cbiAgICB4aHJRdWVzdGlvbkRhdGFzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKCh0aGlzLnN0YXR1cyA9PT0gMjAwIHx8IHRoaXMuc3RhdHVzID09PSAyMDEpICYmIHJlc3BvbnNlLm1lc3NhZ2UhPXVuZGVmaW5lZCAmJiByZXNwb25zZS5xdWVzdGlvbm5haXJlIT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICBzaG93UXVlc3Rpb25JbmZvcyhyZXNwb25zZS5xdWVzdGlvbm5haXJlLlF1ZXN0aW9ucywgdG9rZW4pOy8vIGxlIHNlcnZldXIgbWUgcmV0b3VybmUgdW5lIHZlcnNpb24gYWN0dWFsaXPDqWUgZGUgbGEgbGlzdGUgZGVzIHF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25zLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVlc3Rpb25zTGlzdFwiKTtcbiAgICAgICAgICAgICAgICBzaG93TmV4dFF1ZXN0aW9ubmFpcmVzKHRva2VuKTsvLyBjYXIgcGV1dCBhdm9pciDDqXZvbHXDqSBzdWl2YW50IGNlIHF1aSBzJ2VzdCBwYXNzw6lcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2VRdWVzdGlvbiwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2VRdWVzdGlvbiwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgeGhyUXVlc3Rpb25EYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICB4aHJRdWVzdGlvbkRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3Rva2VuKTtcbiAgICB4aHJRdWVzdGlvbkRhdGFzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbn1cblxuLy8gQWZmaWNoYW50IGxlcyBpbmZvcyBjb25udWVzIGNvbmNlcm5hbnQgdW4gcXVlc3Rpb25uYWlyZSBldCBzZXMgZMOpcGVuZGFuY2VzXG5jb25zdCBzaG93Rm9ybVF1ZXN0aW9ubmFpcmVJbmZvcyA9IChpZCwgdG9rZW4pID0+XG57XG4gICAgY29uc3QgeGhyR2V0SW5mb3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHJHZXRJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLmdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMrXCIvXCIraWQpO1xuICAgIHhockdldEluZm9zLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuUXVlc3Rpb25uYWlyZSAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9ubmFpcmUucmVzZXQoKTsvLyBwb3VyIG5lIHBhcyBnYXJkZXIgbGVzIGRvbm7DqWVzIGTDqWrDoCBhZmZpY2jDqWVzIHNpIHZpZGUgZGFucyBjZSBxdWkgZXN0IHJldG91cm7DqVxuICAgICAgICAgICAgICAgIGZvcihsZXQgZGF0YSBpbiByZXNwb25zZS5RdWVzdGlvbm5haXJlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVF1ZXN0aW9ubmFpcmUuZWxlbWVudHNbZGF0YV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGE9PT1cInB1Ymxpc2hpbmdBdFwiICYmIHJlc3BvbnNlLlF1ZXN0aW9ubmFpcmVbZGF0YV0hPT1udWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW2RhdGFdLnZhbHVlPWRhdGVGb3JtYXQocmVzcG9uc2UuUXVlc3Rpb25uYWlyZVtkYXRhXSwgXCJmb3JtXCIpOy8vICEhIHJldm9pciBjYXIgZm9ybWF0IHBvdXZhbnQgcG9zZXIgc291Y2lzIHNpIG5hdmlnYXRldXIgbmUgZ8OocmUgcGFzIGxlcyBjaGFtcHMgZGUgdHlwZSBcImRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9ubmFpcmUuZWxlbWVudHNbZGF0YV0udmFsdWU9cmVzcG9uc2UuUXVlc3Rpb25uYWlyZVtkYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbGV0ZUNoZWNrQm94LnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgfS8vIGFqb3V0ZXIgZ2VzdGlvbiBkZXMgcmV0b3VycyBlbiBlcnJldXIgP1xuICAgICAgICAgICAgaWYocmVzcG9uc2UuVGFncyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGNsYXNzaWZpY2F0aW9uPVwiXCI7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlLlRhZ3MpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihpPT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24rPXJlc3BvbnNlLlRhZ3NbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24rPVwiLFwiK3Jlc3BvbnNlLlRhZ3NbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9ubmFpcmUuZWxlbWVudHNbXCJjbGFzc2lmaWNhdGlvblwiXS52YWx1ZT1jbGFzc2lmaWNhdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KHJlc3BvbnNlLkdyb3VwKSlcbiAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tcImdyb3VwXCJdLnZhbHVlPXJlc3BvbnNlLkdyb3VwLkdyb3VwLnRpdGxlK1wiIChcIityZXNwb25zZS5Hcm91cC5Hcm91cC5pZCtcIilcIjtcbiAgICAgICAgICAgIGRpdkxpbmtzLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgZGl2UXVlc3Rpb25zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgZGl2SWxsdXN0cmF0aW9ucy5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGlmKHJlc3BvbnNlLkxpbmtzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBzaG93TGlua0luZm9zKHJlc3BvbnNlLkxpbmtzLCB0b2tlbik7XG4gICAgICAgICAgICBpZihyZXNwb25zZS5RdWVzdGlvbnMgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNob3dRdWVzdGlvbkluZm9zKHJlc3BvbnNlLlF1ZXN0aW9ucywgdG9rZW4pO1xuICAgICAgICAgICAgaWYocmVzcG9uc2UuSWxsdXN0cmF0aW9ucyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2hvd0lsbHVzdHJhdGlvbkluZm9zKHJlc3BvbnNlLklsbHVzdHJhdGlvbnMsIHRva2VuKTtcbiAgICAgICAgICAgIGhlbHBQdWJsaXNoaW5nQXQuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjsvLyBpbmZvIHVuaXF1ZW1lbnQgdXRpbGUgcG91ciBcInBsYWNlclwiIHVuIG5vdXZlYXUgcXVpelxuICAgICAgICAgICAgLy8gw6AgcmV2b2lyIDogcmVtcGxhY2VyIGxpZW4gcG91ciB1biBib3V0b24gKyByZXNldCBjb21wbGV0IGR1IGZvcm11bGFpcmUsIHkgY29tcHJpcyBjaGFtcHMgaGlkZGVuIDpcbiAgICAgICAgICAgIGJ0bk5ld1F1ZXN0aW9ubmFpcmUuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBidG5OZXdRdWVzdGlvbm5haXJlLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgY29uZmlnVGVtcGxhdGUucXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSk7XG4gICAgICAgICAgICBidG5QcmV2aWV3UXVlc3Rpb25uYWlyZS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGlmKHJlc3BvbnNlLlF1ZXN0aW9ubmFpcmVbXCJpc1B1Ymxpc2hlZFwiXSA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMucXVlc3Rpb25uYWlyZVJvdXRlcytjb25maWdRdWVzdGlvbm5haXJlcy5wcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIitpZCtcIi9cIit0b2tlbik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBjb25maWcuc2l0ZVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5wdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzK3Jlc3BvbnNlLlF1ZXN0aW9ubmFpcmVbXCJzbHVnXCJdK1wiLmh0bWxcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgeGhyR2V0SW5mb3Muc2VuZCgpO1xufVxuXG4vLyBBZmZpY2hlIGxlcyBxdWVzdGlvbm5haXJlcyBiaWVudMO0dCBwdWJsacOpcy5cbmNvbnN0IHNob3dOZXh0UXVlc3Rpb25uYWlyZXMgPSAodG9rZW4pID0+XG57XG4gICAgY29uc3QgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZ1F1ZXN0aW9ubmFpcmVzLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnUXVlc3Rpb25uYWlyZXMuZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyk7XG4gICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZS5xdWVzdGlvbm5haXJlcykpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGxpc3RIVE1MPVwiXCIsIGRheVN0ciwgb3B0aW9uc0RheVN0ciA9IHsgd2Vla2RheTogJ2xvbmcnfTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UucXVlc3Rpb25uYWlyZXMpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkYXlTdHI9bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobGFuZywgb3B0aW9uc0RheVN0cikuZm9ybWF0KG5ldyBEYXRlKHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmRhdGVQdWJsaXNoaW5nKSk7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIjxsaT5cIitkYXlTdHIrXCIgXCIrZGF0ZUZvcm1hdChyZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5kYXRlUHVibGlzaGluZywgXCJmclwiKStcIjogPGEgaHJlZj0nXCIrY29uZmlnVGVtcGxhdGUucXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZStcIj9pZD1cIityZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pZCtcIicgaWQ9J3F1ZXN0aW9ubmFpcmVfXCIrcmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0uaWQrXCInPlwiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLnRpdGxlK1wiPC9hPlwiO1xuICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pc1B1Ymxpc2hhYmxlPT09ZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0SFRNTCs9XCIgPHNwYW4gY2xhc3M9J2Vycm9yJz4oXCIrcXVlc3Rpb25uYWlyZU5lZWRCZUNvbXBsZXRlZCtcIik8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICBsaXN0SFRNTCs9XCI8L2xpPlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5xdWVzdGlvbm5haXJlcy5sZW5ndGghPT0wKVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcImgzXCIsIG5leHRRdWVzdGlvbm5haXJlc0xpc3QucmVwbGFjZShcIiNOQlwiLCByZXNwb25zZS5xdWVzdGlvbm5haXJlcy5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGhlbHBQdWJsaXNoaW5nQXQsIFwiZW1cIiwgbmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZStkYXRlRm9ybWF0KG5ldyBEYXRlKHJlc3BvbnNlLmRhdGVOZWVkZWQpLCBcImZyXCIpKTtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcInVsXCIsIGxpc3RIVE1MLCBcIlwiLCBcIlwiLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlX1wiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3MoZS50YXJnZXQuaWQuc3BsaXQoXCJfXCIpWzFdLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3F1ZXN0aW9ubmFpcmVzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9Ly8gYWpvdXRlciBnZXN0aW9uIGVycmV1cnMgcmXDp3VlcyBkdSBzZXJ2ZXVyID9cbiAgICAgICAgfVxuICAgIH1cbiAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdG9rZW4pOyBcbiAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMuc2VuZCgpO1xufVxuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7ICAgICAgICBcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKFtcIm1hbmFnZXJcIiwgXCJhZG1pblwiXSwgXCIvXCIrY29uZmlnVGVtcGxhdGUuY29ubmVjdGlvblBhZ2UsIHsgbWVzc2FnZTogbmVlZEJlQ29ubmVjdGVkLCBjb2xvcjpcImVycm9yXCIgfSwgd2luZG93LmxvY2F0aW9uKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpdk1haW4uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAvLyBNaXNlIMOgIGpvdXIgZHUgbGllbiBcImNvbXB0ZVwiIGR1IGhlYWRlciA6XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICAgICAgLy8gSW5pdGlhbGlzYXRpb24gZGVzIGZvcm11bGFpcmVzIDpcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdRdWVzdGlvbm5haXJlcywgZm9ybVNlYXJjaCk7XG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnUXVlc3Rpb25uYWlyZXMuUXVlc3Rpb25uYWlyZSwgZm9ybVF1ZXN0aW9ubmFpcmUpO1xuICAgICAgICAgICAgLy8gVmlkZS9jYWNoZSBsZXMgw6lsw6ltZW50cyBpbnV0aWxlcyBlbiBtb2RlIGNyw6lhdGlvbiA6XG4gICAgICAgICAgICBidG5QcmV2aWV3UXVlc3Rpb25uYWlyZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgZGVsZXRlQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgLy8gU2kgdW4gaWQgZXN0IHBhc3PDqSBwYXIgbCd1cmwsIG9uIGVzc2F5ZSBkJ2FmZmljaGVyIGxlIHF1ZXN0aW9ubmFpcmUgOlxuICAgICAgICAgICAgbGV0IHVybERhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgaWYodXJsRGF0YXMgJiYgdXJsRGF0YXMuaWQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3ModXJsRGF0YXMuaWQsIHVzZXIudG9rZW4pO1xuICAgICAgICAgICAgLy8gbGVzIHByb2NoYWluZXMgcHVibGljYXRpb25zIDpcbiAgICAgICAgICAgIHNob3dOZXh0UXVlc3Rpb25uYWlyZXModXNlci50b2tlbik7XG4gICAgICAgICAgICAvLyBMYW5jZW1lbnQgZCd1bmUgcmVjaGVyY2hlIDpcbiAgICAgICAgICAgIGZvcm1TZWFyY2guYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1TZWFyY2gpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHhoclNlYXJjaCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMucXVlc3Rpb25uYWlyZVJvdXRlcytjb25maWdRdWVzdGlvbm5haXJlcy5zZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUpO1xuICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzcG9uc2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmxlbmd0aD09PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInBcIiwgc2VhcmNoUXVlc3Rpb25uYWlyZVdpdGhOb1Jlc3VsdCwgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdEhUTUw9XCI8b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RIVE1MKz1cIjxvcHRpb24gdmFsdWU9J1wiK3Jlc3BvbnNlW2ldLmlkK1wiJz5cIityZXNwb25zZVtpXS50aXRsZStcIjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJzZWxlY3RcIiwgc2VsZWN0SFRNTCwgXCJzZWxlY3RTZWFyY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFNlbGVjdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdFNlYXJjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzZWFyY2hTZWxlY3QudmFsdWUhPT1cIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtUXVlc3Rpb25uYWlyZUluZm9zKHNlYXJjaFNlbGVjdC52YWx1ZSwgdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBaWRlIMOgIGxhIHNhaXNpZSBwb3VyIGxlIGNsYXNzZW1lbnQgZHUgcXVpelxuICAgICAgICAgICAgaW5wdXRDbGFzc2lmaWNhdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdzPWlucHV0Q2xhc3NpZmljYXRpb24udmFsdWUuc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgIHRhZ3MucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUYWc9dGFnc1swXS50cmltKCk7XG4gICAgICAgICAgICAgICAgaWYobGFzdFRhZy5sZW5ndGggPj0gMilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclNlYXJjaFRhZ3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoVGFncy5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMucXVlc3Rpb25uYWlyZVJvdXRlcytjb25maWdRdWVzdGlvbm5haXJlcy50YWdzU2VhcmNoUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hUYWdzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBDbGFzc2lmaWNhdGlvbi5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGhlbHBDbGFzc2lmaWNhdGlvbiwgXCJhXCIsIHJlc3BvbnNlW2ldLm5hbWUsIFwiI3RhZ1wiK3Jlc3BvbnNlW2ldLmlkLCBbXCJpbmZvXCJdLCB7IGhyZWY6XCIjdGFnXCIrcmVzcG9uc2VbaV0uaWQgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjdGFnXCIrcmVzcG9uc2VbaV0uaWQpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzWzBdPWUudGFyZ2V0LmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENsYXNzaWZpY2F0aW9uLnZhbHVlPXRhZ3Muam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscENsYXNzaWZpY2F0aW9uLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hUYWdzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hUYWdzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hUYWdzLnNlbmQoSlNPTi5zdHJpbmdpZnkoe3NlYXJjaDogbGFzdFRhZ30pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQWlkZSDDoCBsYSBzw6lsZWN0aW9uIGQndW4gZ3JvdXBlIHBvdXIgbGUgcXVpelxuICAgICAgICAgICAgaW5wdXRHcm91cC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZVtcIkdyb3VwSWRcIl0udmFsdWU9XCJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cElucHV0PWlucHV0R3JvdXAudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgIGlmKGdyb3VwSW5wdXQubGVuZ3RoID49IGNvbmZpZ1F1ZXN0aW9ubmFpcmVzLnNlYXJjaEdyb3Vwcy5taW5sZW5ndGgpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJTZWFyY2hHcm91cHMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoR3JvdXBzLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5ncm91cFJvdXRlcytjb25maWdRdWVzdGlvbm5haXJlcy5zZWFyY2hHcm91cHNSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaEdyb3Vwcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwR3JvdXAuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChoZWxwR3JvdXAsIFwiYVwiLCByZXNwb25zZVtpXS50aXRsZSwgXCIjZ3JvdXBcIityZXNwb25zZVtpXS5pZCwgW1wiaW5mb1wiXSwgeyBocmVmOlwiI2dyb3VwXCIrcmVzcG9uc2VbaV0uaWQgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjZ3JvdXBcIityZXNwb25zZVtpXS5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0R3JvdXAudmFsdWU9cmVzcG9uc2VbaV0udGl0bGUrXCIgKFwiK3Jlc3BvbnNlW2ldLmlkK1wiKVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlW1wiR3JvdXBJZFwiXS52YWx1ZT1yZXNwb25zZVtpXS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXNwb25zZVtpXS5tYXhSYW5rKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRSYW5rSW5Hcm91cC52YWx1ZT1yZXNwb25zZVtpXS5tYXhSYW5rKzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFJhbmtJbkdyb3VwLnZhbHVlPTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscEdyb3VwLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoR3JvdXBzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hHcm91cHMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaEdyb3Vwcy5zZW5kKEpTT04uc3RyaW5naWZ5KHtzZWFyY2hHcm91cHM6IGdyb3VwSW5wdXR9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFRyYWl0ZW1lbnQgZGUgbCdlbnZvaSBkdSBmb3JtdWxhaXJlIGRlcyBpbmZvcyBkZSBiYXNlIGR1IHF1aXpcbiAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgZGl2UmVzcG9uc2UuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtUXVlc3Rpb25uYWlyZSk7XG4gICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkoZGF0YXMucmFua0luR3JvdXApICYmIGlzRW1wdHkoZGF0YXMuR3JvdXBJZCkpXG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBuZWVkR3JvdXBJZlJhbmssIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihpc0VtcHR5KGRhdGFzLnJhbmtJbkdyb3VwKSAmJiAhaXNFbXB0eShkYXRhcy5Hcm91cElkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzLnJhbmtJbkdyb3VwPTE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclF1ZXN0aW9ubmFpcmVEYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKGRhdGFzLmRlbGV0ZU9rIT09dW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWdRdWVzdGlvbm5haXJlcy5xdWVzdGlvbm5haXJlUm91dGVzK1wiL1wiK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZighaXNFbXB0eShkYXRhcy5pZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbm5haXJlRGF0YXMub3BlbihcIlBVVFwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMucXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIitkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnUXVlc3Rpb25uYWlyZXMucXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGFkZE9rTWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzLmlkPXJlc3BvbnNlLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TmV4dFF1ZXN0aW9ubmFpcmVzKHVzZXIudG9rZW4pOy8vIHBldXQgYXZvaXIgw6l2b2x1w6kgc3VpdmFudCBjZSBxdWkgcydlc3QgcGFzc8OpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dOZXh0UXVlc3Rpb25uYWlyZXModXNlci50b2tlbik7Ly8gcGV1dCBhdm9pciDDqXZvbHXDqSBzdWl2YW50IGNlIHF1aSBzJ2VzdCBwYXNzw6lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSBzZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLmRlbGV0ZU9rID09PSB1bmRlZmluZWQgJiYgcmVzcG9uc2UuZXJyb3JzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtUXVlc3Rpb25uYWlyZUluZm9zKGRhdGFzLmlkLCB1c2VyLnRva2VuKTsvLyBvbiBhY3R1YWxpc2UgbGVzIGRvbm7DqWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZMaW5rcy5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2SWxsdXN0cmF0aW9ucy5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UXVlc3Rpb25zLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbm5haXJlRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbm5haXJlRGF0YXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybUxpbmsuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzZW5kTGlua0Zvcm0odXNlci50b2tlbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvcm1JbGx1c3RyYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzZW5kSWxsdXN0cmF0aW9uRm9ybSh1c2VyLnRva2VuKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc2VuZFF1ZXN0aW9uRm9ybSh1c2VyLnRva2VuKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICBhZGRFbGVtZW50KGRpdkNyYXNoLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7XG5oZWxsb0RldigpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgPSAoaW5wdXRzQ29uZiwgbXlGb3JtKSA9Plxue1xuICAgIGZvcihsZXQgaSBpbiBteUZvcm0uZWxlbWVudHMpXG4gICAge1xuICAgICAgICBpZighaXNFbXB0eShteUZvcm0uZWxlbWVudHNbaV0uaWQpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgaWRJbnB1dD1teUZvcm0uZWxlbWVudHNbaV0uaWQ7XG4gICAgICAgICAgICBpZihpbnB1dHNDb25mW2lkSW5wdXRdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dEhUTUw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRJbnB1dCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIGluIGlucHV0c0NvbmZbaWRJbnB1dF0pXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SFRNTC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbnB1dHNDb25mW2lkSW5wdXRdW2F0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBSw6ljdXDDqHJlIHRvdXRlcyBsZXMgdmFsZXVycyBkZSBjaGFtcHMgZW4gb21ldHRhbnQgbGVzIGNoZWNrYm94IG5vbiBjb2Now6llcywgZXRjLlxuZXhwb3J0IGNvbnN0IGdldERhdGFzRnJvbUlucHV0cyA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZGF0YXM9e307XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAgICAgZGF0YXNbZW50cmllWzBdXT1lbnRyaWVbMV07XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBWaWRlIHRvdXMgbGVzIGNoYW1wcyBkJ3VuIGZvcm11bGFpcmUsIHkgY29tcHJpcyBoaWRkZW4sIGNoZWNrYm94LCBldGMuXG4vLyBSZXZvaXIgcG91ciBsZXMgc2VsZWN0XG5leHBvcnQgY29uc3QgZW1weUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgIHtcbiAgICAgICAgaWYobXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJjaGVja2JveFwiIHx8IG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwicmFkaW9cIilcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLmNoZWNrZWQ9ZmFsc2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnZhbHVlPVwiXCI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8gVmlkZSBldCBjYWNoZSBsZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgZW1weUFuZEhpZGVGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBlbXB5Rm9ybShteUZvcm0pO1xuICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/manageUsers.app.js b/front/public/JS/manageUsers.app.js index 6cc2650..390170d 100644 --- a/front/public/JS/manageUsers.app.js +++ b/front/public/JS/manageUsers.app.js @@ -1033,10 +1033,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DU FORMULAIRE PERMETTANT DE SAISIR / ÉDITER LES INFOS DES UTILISATEURS ET DE LEUR ABONNEMENT /// Vérifie que l'utilisateur est bien connecté, a le bon statut et le redirige vers le formulaire d'inscription si ce n'est pas le cas. /// Si c'est ok, propose un moteur de recherche permettant de chercher un utilisateur @@ -1047,11 +1043,11 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// - attribution d'un parrain à un utilisateur (via un moteur de recherche). Déjà prévu par le contrôleur. // Fichier de configuration côté client : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configUsers = __webpack_require__(/*! ../../config/users.js */ "../config/users.js"); +const configUsers = __webpack_require__(/*! ../../config/users.js */ "../config/users.js"); -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions utiles au script : +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions utiles au script : @@ -1062,335 +1058,305 @@ var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - addOkMessage = _require.addOkMessage, - serverError = _require.serverError; +const { + addOkMessage, + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - infosAdminGodfather = _require2.infosAdminGodfather, - infosAdminNbGodChilds = _require2.infosAdminNbGodChilds, - infosUserForAdmin = _require2.infosUserForAdmin, - needBeConnected = _require2.needBeConnected, - searchUsersWithoutResult = _require2.searchUsersWithoutResult; +const { + infosAdminGodfather, + infosAdminNbGodChilds, + infosUserForAdmin, + needBeConnected, + searchUsersWithoutResult +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/subscription$")("./" + lang + "/subscription"), - infosExpiratedAdmin = _require3.infosExpiratedAdmin, - infosNbDaysAdmin = _require3.infosNbDaysAdmin, - infosPaymentsAdmin = _require3.infosPaymentsAdmin, - isNotValided = _require3.isNotValided; // Principaux éléments du DOM manipulés : +const { + infosExpiratedAdmin, + infosNbDaysAdmin, + infosPaymentsAdmin, + isNotValided +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/subscription$")("./" + lang + "/subscription"); // Principaux éléments du DOM manipulés : -var divMain = document.getElementById("main-content"); -var divMessage = document.getElementById("message"); -var divResponse = document.getElementById("response"); -var divCrash = document.getElementById("crash"); -var divSubscribeIntro = document.getElementById("subscribeIntro"); -var divPaymentsInfos = document.getElementById("infosPayments"); -var divGodchildsInfos = document.getElementById("infosGodchilds"); -var formUser = document.getElementById("users"); -var deleteCheckBox = document.getElementById("deleteOkLabel"); -var validationCheckBox = document.getElementById("validationOkLabel"); -var btnNewUser = document.getElementById("wantNewUser"); -var newPassword = document.getElementById("newPassword"); -var timeDifference = document.getElementById("timeDifference"); -var formSearch = document.getElementById("searchUsers"); -var divSearchResult = document.getElementById("searchResult"); +const divMain = document.getElementById("main-content"); +const divMessage = document.getElementById("message"); +const divResponse = document.getElementById("response"); +const divCrash = document.getElementById("crash"); +const divSubscribeIntro = document.getElementById("subscribeIntro"); +const divPaymentsInfos = document.getElementById("infosPayments"); +const divGodchildsInfos = document.getElementById("infosGodchilds"); +const formUser = document.getElementById("users"); +const deleteCheckBox = document.getElementById("deleteOkLabel"); +const validationCheckBox = document.getElementById("validationOkLabel"); +const btnNewUser = document.getElementById("wantNewUser"); +const newPassword = document.getElementById("newPassword"); +const timeDifference = document.getElementById("timeDifference"); +const formSearch = document.getElementById("searchUsers"); +const divSearchResult = document.getElementById("searchResult"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, emptyUserForm, showFormUserInfos, urlDatas; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["checkSession"])(["manager", "admin"], "/" + configTemplate.connectionPage, { - message: needBeConnected, - color: "error" - }, window.location); +const initialise = async () => { + try { + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["checkSession"])(["manager", "admin"], "/" + configTemplate.connectionPage, { + message: needBeConnected, + color: "error" + }, window.location); - case 3: - isConnected = _context.sent; + if (isConnected) { + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); + divMain.style.display = "block"; - if (isConnected) { - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); - divMain.style.display = "block"; - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); - } // Initialisation du formulaire de recherche : + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message", true).color], "", false); + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["removeLocaly"])("message"); + } // Initialisation du formulaire de recherche : - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, formSearch); // Fonction utile pour vider le formulaire, y compris les champs hidden, etc. - // Cache aussi certains champs en mode création + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, formSearch); // Fonction utile pour vider le formulaire, y compris les champs hidden, etc. + // Cache aussi certains champs en mode création - emptyUserForm = function emptyUserForm() { - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["empyForm"])(formUser); // Case de suppression cachée par défaut, car inutile pour formulaire de création + const emptyUserForm = () => { + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["empyForm"])(formUser); // Case de suppression cachée par défaut, car inutile pour formulaire de création - deleteCheckBox.style.display = "none"; // Case de validation cachée par défaut, car utile que dans certains cas + deleteCheckBox.style.display = "none"; // Case de validation cachée par défaut, car utile que dans certains cas - validationCheckBox.style.display = "none"; - divSubscribeIntro.innerHTML = ""; - divPaymentsInfos.innerHTML = ""; - divGodchildsInfos.innerHTML = ""; // Certains navigateurs ont tendance à remplir tout seul les champs configUsers.password + validationCheckBox.style.display = "none"; + divSubscribeIntro.innerHTML = ""; + divPaymentsInfos.innerHTML = ""; + divGodchildsInfos.innerHTML = ""; // Certains navigateurs ont tendance à remplir tout seul les champs configUsers.password - newPassword.value = ""; // En mode création, pas de champ pour changer le mot de passe + newPassword.value = ""; // En mode création, pas de champ pour changer le mot de passe - newPassword.parentNode.style.display = "none"; // Inutile en mode création + newPassword.parentNode.style.display = "none"; // Inutile en mode création - timeDifference.parentNode.style.display = "none"; + timeDifference.parentNode.style.display = "none"; + }; + + emptyUserForm(); // Initialise les contraintes du formulaire : + + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, formUser); // Fonction affichant les infos connues concernant un utilisateur et son abonnement + + const showFormUserInfos = id => { + // on commence par tout vider, des fois que... : + emptyUserForm(); + const xhrGetInfos = new XMLHttpRequest(); + xhrGetInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getUserInfos + id); + + xhrGetInfos.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 200 && response.User != undefined) { + newPassword.parentNode.style.display = "block"; + timeDifference.parentNode.style.display = "block"; + const mapText = { + ID_USER: response.User.id, + DATE_CREA: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.User.createdAt), + DATE_UPDATE: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.User.updatedAt), + DATE_CONNECTION: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.User.connectedAt) + }; + let subscribeIntro = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(infosUserForAdmin, mapText); + + for (let data in response.User) { + if (formUser.elements[data] !== undefined) { + if (response.User[data] !== true && response.User[data] !== false) // booléen = case à cocher ! + formUser.elements[data].value = response.User[data];else if (response.User[data] == true) // si false, on ne fait rien + formUser.elements["" + data].checked = "checked"; + } + } + + if (response.Subscription != undefined) { + // nombre de jours de l'abonnement + formUser.elements["numberOfDays"].value = response.Subscription["numberOfDays"]; // jours de réception + + for (let i in response.Subscription.receiptDays) formUser.elements["d" + response.Subscription.receiptDays[i]].checked = "checked"; + + const beginSubTS = new Date(response.Subscription.createdAt).getTime(); + + if (response.Subscription.numberOfDays !== 0) { + const nbDaysOk = response.Subscription.numberOfDays - Math.round((Date.now() - beginSubTS) / 1000 / 3600 / 24); + if (nbDaysOk > 0) subscribeIntro += "
    " + infosNbDaysAdmin.replace("NB_DAYS", nbDaysOk);else subscribeIntro += "
    dd" + infosExpiratedAdmin; + } + + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSubscribeIntro, "p", subscribeIntro, "", ["info"], "", false); + } else { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSubscribeIntro, "p", isNotValided, "", ["error"]); + validationCheckBox.style.display = "block"; + } + + deleteCheckBox.style.display = "block"; // Infos de paiements via API WP + + const xhrGetPaymentsInfos = new XMLHttpRequest(); + xhrGetPaymentsInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.getPayments + response.User.id); + + xhrGetPaymentsInfos.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let responsePay = JSON.parse(this.responseText); + + if (this.status === 200) { + if (responsePay.length !== 0) { + let txtPayments = ""; + + for (let i in responsePay) { + const mapText = { + DATE_PAYMENT: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(responsePay[i].createdAt, "fr"), + AMOUNT: responsePay[i].amount, + CLIENT_NAME: responsePay[i].clientName + }; + txtPayments += "
  • " + Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(infosNbDaysAdmin, mapText) + "
  • "; + } + + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divPaymentsInfos, "ul", txtPayments, "", ["info"], "", false); + divPaymentsInfos.style.display = "block"; + } + } + } }; - emptyUserForm(); // Initialise les contraintes du formulaire : + xhrGetPaymentsInfos.setRequestHeader("Authorization", "Bearer " + user.token); + xhrGetPaymentsInfos.send(); // Un parrain ou deux par deux ? - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, formUser); // Fonction affichant les infos connues concernant un utilisateur et son abonnement + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.User.GodfatherId)) { + const xhrGetGodFatherInfos = new XMLHttpRequest(); + xhrGetGodFatherInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getUserInfos + response.User.GodfatherId); - showFormUserInfos = function showFormUserInfos(id) { - // on commence par tout vider, des fois que... : - emptyUserForm(); - var xhrGetInfos = new XMLHttpRequest(); - xhrGetInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getUserInfos + id); - - xhrGetInfos.onreadystatechange = function () { + xhrGetGodFatherInfos.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let responseGF = JSON.parse(this.responseText); - if (this.status === 200 && response.User != undefined) { - newPassword.parentNode.style.display = "block"; - timeDifference.parentNode.style.display = "block"; - var mapText = { - ID_USER: response.User.id, - DATE_CREA: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.User.createdAt), - DATE_UPDATE: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.User.updatedAt), - DATE_CONNECTION: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response.User.connectedAt) - }; - var subscribeIntro = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(infosUserForAdmin, mapText); - - for (var data in response.User) { - if (formUser.elements[data] !== undefined) { - if (response.User[data] !== true && response.User[data] !== false) // booléen = case à cocher ! - formUser.elements[data].value = response.User[data];else if (response.User[data] == true) // si false, on ne fait rien - formUser.elements["" + data].checked = "checked"; - } - } - - if (response.Subscription != undefined) { - // nombre de jours de l'abonnement - formUser.elements["numberOfDays"].value = response.Subscription["numberOfDays"]; // jours de réception - - for (var i in response.Subscription.receiptDays) { - formUser.elements["d" + response.Subscription.receiptDays[i]].checked = "checked"; - } - - var beginSubTS = new Date(response.Subscription.createdAt).getTime(); - - if (response.Subscription.numberOfDays !== 0) { - var nbDaysOk = response.Subscription.numberOfDays - Math.round((Date.now() - beginSubTS) / 1000 / 3600 / 24); - if (nbDaysOk > 0) subscribeIntro += "
    " + infosNbDaysAdmin.replace("NB_DAYS", nbDaysOk);else subscribeIntro += "
    dd" + infosExpiratedAdmin; - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSubscribeIntro, "p", subscribeIntro, "", ["info"], "", false); - } else { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSubscribeIntro, "p", isNotValided, "", ["error"]); - validationCheckBox.style.display = "block"; - } - - deleteCheckBox.style.display = "block"; // Infos de paiements via API WP - - var xhrGetPaymentsInfos = new XMLHttpRequest(); - xhrGetPaymentsInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.getPayments + response.User.id); - - xhrGetPaymentsInfos.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var responsePay = JSON.parse(this.responseText); - - if (this.status === 200) { - if (responsePay.length !== 0) { - var txtPayments = ""; - - for (var _i in responsePay) { - var _mapText = { - DATE_PAYMENT: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(responsePay[_i].createdAt, "fr"), - AMOUNT: responsePay[_i].amount, - CLIENT_NAME: responsePay[_i].clientName - }; - txtPayments += "
  • " + Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(infosNbDaysAdmin, _mapText) + "
  • "; - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divPaymentsInfos, "ul", txtPayments, "", ["info"], "", false); - divPaymentsInfos.style.display = "block"; - } - } - } - }; - - xhrGetPaymentsInfos.setRequestHeader("Authorization", "Bearer " + user.token); - xhrGetPaymentsInfos.send(); // Un parrain ou deux par deux ? - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.User.GodfatherId)) { - var xhrGetGodFatherInfos = new XMLHttpRequest(); - xhrGetGodFatherInfos.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getUserInfos + response.User.GodfatherId); - - xhrGetGodFatherInfos.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var responseGF = JSON.parse(this.responseText); - - if (this.status === 200 && responseGF.User != undefined) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGodchildsInfos, "p", infosAdminGodfather + "" + responseGF.User.name + "" + ".
    ", "", ["info"], "", false); - divGodchildsInfos.style.display = "block"; - } - } - }; - - xhrGetGodFatherInfos.setRequestHeader("Authorization", "Bearer " + user.token); - xhrGetGodFatherInfos.send(); - } // Des filleuls ? - - - var txtGodchilds = ""; - var xhrGetGodchilds = new XMLHttpRequest(); - xhrGetGodchilds.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getGodChilds + id); - - xhrGetGodchilds.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var responseGS = JSON.parse(this.responseText); - - if (this.status === 200) { - if (responseGS.length !== 0) { - txtGodchilds += infosAdminGodfather.replace("#NB", responseGS.length); - - for (var _i2 in responseGS) { - txtGodchilds += "" + responseGS[_i2].name + ""; - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGodchildsInfos, "p", txtGodchilds + ".", "", ["info"], "", false); - divGodchildsInfos.style.display = "block"; - } - } - } - }; - - xhrGetGodchilds.setRequestHeader("Authorization", "Bearer " + user.token); - xhrGetGodchilds.send(); + if (this.status === 200 && responseGF.User != undefined) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGodchildsInfos, "p", infosAdminGodfather + "" + responseGF.User.name + "" + ".
    ", "", ["info"], "", false); + divGodchildsInfos.style.display = "block"; } } }; - xhrGetInfos.setRequestHeader("Authorization", "Bearer " + user.token); - xhrGetInfos.send(); - }; // Si un id est passé par l'url, on essaye d'afficher l'utilisateur : + xhrGetGodFatherInfos.setRequestHeader("Authorization", "Bearer " + user.token); + xhrGetGodFatherInfos.send(); + } // Des filleuls ? - urlDatas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_6__["getUrlParams"])(); - if (urlDatas && urlDatas.id !== undefined) showFormUserInfos(urlDatas.id); // Besoin d'un coup de Kärcher ? + let txtGodchilds = ""; + const xhrGetGodchilds = new XMLHttpRequest(); + xhrGetGodchilds.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getGodChilds + id); - btnNewUser.addEventListener("click", function (e) { - emptyUserForm(); - }); // Envoi du formulaire des infos de l'utilisateur + xhrGetGodchilds.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let responseGS = JSON.parse(this.responseText); - formUser.addEventListener("submit", function (e) { - e.preventDefault(); - divResponse.innerHTML = ""; - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formUser); // recomposition des jours valables pour l'abonnement : + if (this.status === 200) { + if (responseGS.length !== 0) { + txtGodchilds += infosAdminGodfather.replace("#NB", responseGS.length); - datas.receiptDays = ""; + for (let i in responseGS) txtGodchilds += "" + responseGS[i].name + ""; - for (var i = 1; i <= 7; i++) { - if (datas["d" + i] !== undefined) datas.receiptDays += "" + i; - } - - var xhrUserDatas = new XMLHttpRequest(); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && datas.deleteOk !== undefined) xhrUserDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + "/" + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && datas.validationOk !== undefined) xhrUserDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.validateUserRoute + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrUserDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.updateUserInfos + datas.id);else { - datas.password = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["getPassword"])(configUsers.password.minlength, configUsers.password.minlength + 2); // mot de passe temporaire - - xhrUserDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.createUserRoute); - } - - xhrUserDatas.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 201 && response.id != undefined) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", addOkMessage, "", ["success"]); - datas.id = response.id; - } else if (this.status === 200 && response.message != undefined) { - if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); - } else if (response.errors) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.errors)) { - if (datas.deleteOk === undefined) showFormUserInfos(datas.id);else emptyUserForm(); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGodchildsInfos, "p", txtGodchilds + ".", "", ["info"], "", false); + divGodchildsInfos.style.display = "block"; } } - }; + } + }; - xhrUserDatas.setRequestHeader("Content-Type", "application/json"); - xhrUserDatas.setRequestHeader("Authorization", "Bearer " + user.token); - if (datas) xhrUserDatas.send(JSON.stringify(datas)); - }); // Traitement du lancement d'une recherche - - formSearch.addEventListener("submit", function (e) { - e.preventDefault(); - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch); - var xhrSearch = new XMLHttpRequest(); - xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.searchUserRoute); - - xhrSearch.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && Array.isArray(response)) { - if (response.length === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", searchUsersWithoutResult, "", ["info"]);else { - var selectHTML = ""; - - for (var i in response) { - selectHTML += ""; - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "select", selectHTML, "selectSearch"); - var searchSelect = document.getElementById("selectSearch"); - searchSelect.addEventListener("change", function () { - if (searchSelect.value !== "") showFormUserInfos(searchSelect.value); - }); - } - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", serverError, "", ["error"]); - } - }; - - xhrSearch.setRequestHeader("Content-Type", "application/json"); - xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token); - if (datas) xhrSearch.send(JSON.stringify(datas)); - }); + xhrGetGodchilds.setRequestHeader("Authorization", "Bearer " + user.token); + xhrGetGodchilds.send(); } + } + }; - _context.next = 11; - break; + xhrGetInfos.setRequestHeader("Authorization", "Bearer " + user.token); + xhrGetInfos.send(); + }; // Si un id est passé par l'url, on essaye d'afficher l'utilisateur : - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); - console.error(_context.t0); - case 11: - case "end": - return _context.stop(); + let urlDatas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_6__["getUrlParams"])(); + if (urlDatas && urlDatas.id !== undefined) showFormUserInfos(urlDatas.id); // Besoin d'un coup de Kärcher ? + + btnNewUser.addEventListener("click", function (e) { + emptyUserForm(); + }); // Envoi du formulaire des infos de l'utilisateur + + formUser.addEventListener("submit", function (e) { + e.preventDefault(); + divResponse.innerHTML = ""; + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formUser); // recomposition des jours valables pour l'abonnement : + + datas.receiptDays = ""; + + for (let i = 1; i <= 7; i++) { + if (datas["d" + i] !== undefined) datas.receiptDays += "" + i; } - } - }, _callee, null, [[0, 7]]); - })); - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + const xhrUserDatas = new XMLHttpRequest(); + if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && datas.deleteOk !== undefined) xhrUserDatas.open("DELETE", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + "/" + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id) && datas.validationOk !== undefined) xhrUserDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.validateUserRoute + datas.id);else if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(datas.id)) xhrUserDatas.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.updateUserInfos + datas.id);else { + datas.password = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["getPassword"])(configUsers.password.minlength, configUsers.password.minlength + 2); // mot de passe temporaire + + xhrUserDatas.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.createUserRoute); + } + + xhrUserDatas.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 201 && response.id != undefined) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", addOkMessage, "", ["success"]); + datas.id = response.id; + } else if (this.status === 200 && response.message != undefined) { + if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); + } else if (response.errors) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.errors)) { + if (datas.deleteOk === undefined) showFormUserInfos(datas.id);else emptyUserForm(); + } + } + }; + + xhrUserDatas.setRequestHeader("Content-Type", "application/json"); + xhrUserDatas.setRequestHeader("Authorization", "Bearer " + user.token); + if (datas) xhrUserDatas.send(JSON.stringify(datas)); + }); // Traitement du lancement d'une recherche + + formSearch.addEventListener("submit", function (e) { + e.preventDefault(); + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch); + const xhrSearch = new XMLHttpRequest(); + xhrSearch.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.searchUserRoute); + + xhrSearch.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 200 && Array.isArray(response)) { + if (response.length === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", searchUsersWithoutResult, "", ["info"]);else { + let selectHTML = ""; + + for (let i in response) selectHTML += ""; + + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "select", selectHTML, "selectSearch"); + const searchSelect = document.getElementById("selectSearch"); + searchSelect.addEventListener("change", function () { + if (searchSelect.value !== "") showFormUserInfos(searchSelect.value); + }); + } + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divSearchResult, "p", serverError, "", ["error"]); + } + }; + + xhrSearch.setRequestHeader("Content-Type", "application/json"); + xhrSearch.setRequestHeader("Authorization", "Bearer " + user.token); + if (datas) xhrSearch.send(JSON.stringify(datas)); + }); + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", serverError, "", ["error"]); + console.error(e); + } +}; initialise(); @@ -1410,14 +1376,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1435,32 +1400,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1484,13 +1438,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1511,25 +1465,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1537,49 +1483,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1600,14 +1524,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); // Fonction récupérant les paramètres passés par l'url -var getUrlParams = function getUrlParams() { +const getUrlParams = () => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); + const parameters = location.search.substring(1).split("&"); if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, + let param, datas = {}; - for (var i in parameters) { + for (let i in parameters) { param = parameters[i].split("="); if (param.length === 2) datas[param[0]] = decodeURI(param[1]); } @@ -1637,27 +1561,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1666,11 +1586,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1684,96 +1604,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1782,4 +1674,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21hbmFnZVVzZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91cmwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiZGVmYXVsdFJlY2VpcHREYXlzIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsImZpZWxkTmV3UXVlc3Rpb25uYWlyZXMiLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbiIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4IiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmVzIiwiZGlyV2ViUXVlc3Rpb25uYWlyZXMiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInJlZ2VuZXJhdGVIVE1MIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdyb3VwUm91dGVzIiwiZ2V0R3JvdXBSb3V0ZSIsInByZXZpZXdHcm91cFJvdXRlcyIsInNlYXJjaEdyb3Vwc1JvdXRlIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRBZG1pblN0YXRzIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiYWRkQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJiYWRVcmwiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuU2hvd09uV2ViU2l0ZSIsImRlbGV0ZUJ0blR4dCIsImRlbGV0ZUZhaWxNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aENyb24iLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aFRva2VuIiwibmVlZGVkUGFyYW1zIiwibmV4dFBhZ2UiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJub3RWYWxpZEZvcm1hdCIsInByZXZpb3VzUGFnZSIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzY3JpcHRUaW1pbmdJbmZvIiwic3RhdHNBZG1pbiIsInN1YnNjcmlwdGlvbkNhbGwiLCJ1cGRhdGVCdG5UeHQiLCJ1cGRhdGVPa01lc3NhZ2UiLCJhbGxTdWJzY3JpcHRpb25Qcm9jZXNzZWQiLCJpbmZvc0V4cGlyYXRlZCIsImluZm9zRXhwaXJhdGVkQWRtaW4iLCJpbmZvc05iRGF5cyIsImluZm9zTmJEYXlzQWRtaW4iLCJpbmZvc1BheW1lbnRzQWRtaW4iLCJpc05vdFZhbGlkZWQiLCJtYWlsRW5kRnJlZVRpbWVCb2R5SFRNTCIsIm1haWxFbmRGcmVlVGltZUJvZHlUeHQiLCJtYWlsRW5kRnJlZVRpbWVMaW5rVHh0IiwibWFpbEVuZEZyZWVUaW1lTWVzc2FnZSIsIm1haWxFbmRGcmVlVGltZVN1YmplY3QiLCJtYWlsRXhwaXJhdGlvbkJvZHlIVE1MIiwibWFpbEV4cGlyYXRpb25Cb2R5VHh0IiwibWFpbEV4cGlyYXRpb25MaW5rVHh0IiwibWFpbEV4cGlyYXRpb25NZXNzYWdlIiwibWFpbEV4cGlyYXRpb25SZWxhdW5jaFR4dCIsIm1haWxFeHBpcmF0aW9uU3ViamVjdCIsIm1haWxOZXdFbGVtZW50Rm9yR3JvdXBUeHQiLCJtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlUeHQiLCJtYWlsU3RvcE1haWxMaW5rVHh0IiwibmVlZEtub3dJZk5vdGljZU9rIiwibmVlZEludGVnZXJOdW1iZXJPZkRheXMiLCJuZWVkTWluTnVtYmVyT2ZEYXlzIiwibmVlZE5vdFRvb0xvbmdEYXlzTGlzdCIsIm5lZWROdW1iZXJPZkRheXMiLCJuZWVkVW5pcXVlRGF5c0xpc3QiLCJuZWVkVmFsaWREYXlzTGlzdCIsIm5vTmV3UXVlc3Rpb25uYWlyZUZvclVzZXIiLCJ1bnN1YnNjcmlwdGlvbk9rIiwidW5zdWJzY3JpcHRpb25GYWlsIiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExhbmd1YWdlIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJjb25maWdVc2VycyIsImNvbmZpZ1RlbXBsYXRlIiwiZGl2TWFpbiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZNZXNzYWdlIiwiZGl2UmVzcG9uc2UiLCJkaXZDcmFzaCIsImRpdlN1YnNjcmliZUludHJvIiwiZGl2UGF5bWVudHNJbmZvcyIsImRpdkdvZGNoaWxkc0luZm9zIiwiZm9ybVVzZXIiLCJkZWxldGVDaGVja0JveCIsInZhbGlkYXRpb25DaGVja0JveCIsImJ0bk5ld1VzZXIiLCJ0aW1lRGlmZmVyZW5jZSIsImZvcm1TZWFyY2giLCJkaXZTZWFyY2hSZXN1bHQiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJjaGVja1Nlc3Npb24iLCJtZXNzYWdlIiwiY29sb3IiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImlzQ29ubmVjdGVkIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwic3R5bGUiLCJkaXNwbGF5IiwiYWRkRWxlbWVudCIsInJlbW92ZUxvY2FseSIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsImVtcHR5VXNlckZvcm0iLCJlbXB5Rm9ybSIsImlubmVySFRNTCIsInBhcmVudE5vZGUiLCJzaG93Rm9ybVVzZXJJbmZvcyIsInhockdldEluZm9zIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIlVzZXIiLCJtYXBUZXh0IiwiSURfVVNFUiIsIkRBVEVfQ1JFQSIsImRhdGVGb3JtYXQiLCJjcmVhdGVkQXQiLCJEQVRFX1VQREFURSIsInVwZGF0ZWRBdCIsIkRBVEVfQ09OTkVDVElPTiIsImNvbm5lY3RlZEF0Iiwic3Vic2NyaWJlSW50cm8iLCJyZXBsYWNlQWxsIiwiZGF0YSIsImVsZW1lbnRzIiwiY2hlY2tlZCIsIlN1YnNjcmlwdGlvbiIsInJlY2VpcHREYXlzIiwiYmVnaW5TdWJUUyIsImdldFRpbWUiLCJudW1iZXJPZkRheXMiLCJuYkRheXNPayIsInJvdW5kIiwibm93IiwieGhyR2V0UGF5bWVudHNJbmZvcyIsInJlc3BvbnNlUGF5IiwidHh0UGF5bWVudHMiLCJEQVRFX1BBWU1FTlQiLCJBTU9VTlQiLCJhbW91bnQiLCJDTElFTlRfTkFNRSIsImNsaWVudE5hbWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwidG9rZW4iLCJzZW5kIiwiR29kZmF0aGVySWQiLCJ4aHJHZXRHb2RGYXRoZXJJbmZvcyIsInJlc3BvbnNlR0YiLCJ0eHRHb2RjaGlsZHMiLCJ4aHJHZXRHb2RjaGlsZHMiLCJyZXNwb25zZUdTIiwidXJsRGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJVc2VyRGF0YXMiLCJkZWxldGVPayIsInZhbGlkYXRpb25PayIsImdldFBhc3N3b3JkIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwic3RyaW5naWZ5IiwieGhyU2VhcmNoIiwic2VsZWN0SFRNTCIsInNlYXJjaFNlbGVjdCIsImNvbnNvbGUiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJsaW5rIiwiaG9tZVBhZ2UiLCJpbnB1dHNDb25mIiwibXlGb3JtIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWVzIiwiZW50cmllIiwidHlwZSIsImVtcHlBbmRIaWRlRm9ybSIsInBhcmFtZXRlcnMiLCJzcGxpdCIsInBhcmFtIiwiZGVjb2RlVVJJIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsImFzc2lnbiIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyxtQ0FBRCxD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TUFBRyxDQUFDelAsMkRBQU8sQ0FBQzJHLE9BQUQsQ0FBWCxFQUNJeUYsb0VBQVUsQ0FBQyxTQUFELEVBQVl6RixPQUFaLENBQVY7QUFDSixNQUFHLENBQUMzRywyREFBTyxDQUFDeVAsU0FBRCxDQUFYLEVBQ0lyRCxvRUFBVSxDQUFDLEtBQUQsRUFBUXFELFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ3pQLDJEQUFPLENBQUN3UCxjQUFELENBQVgsRUFDSTNJLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQnVKLE1BQWhCLENBQXVCYixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL21hbmFnZVVzZXJzLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL21hbmFnZVVzZXJzLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9zdWJzY3JpcHRpb25cIjogXCIuLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3N1YnNjcmlwdGlvbiRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFsbFN1YnNjcmlwdGlvblByb2Nlc3NlZCA6IFwiVG91cyBsZXMgYWJvbm7DqXMgb250IMOpdMOpIHRyYWl0w6lzIHBvdXIgbGUgbW9tZW50LlwiLFxuICAgIGluZm9zRXhwaXJhdGVkOiBcIlZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpLCBtYWlzIGlsIHZvdXMgcmVzdGUgZW5jb3JlIHF1ZWxxdWVzIGpvdXJzIGF2YW50IHF1ZSB2b3RyZSBjb21wdGUgZXQgdm9zIGRvbm7DqWVzIG5lIHNvaWVudCBjb21wbMOodGVtZW50IHN1cHByaW3DqWVzLjxicj5Qb3VyIGNlIGZhaXJlLCBzdWl2ZXogc2FucyB0YXJkZXIgbGVzIGluZGljYXRpb25zIGNpLWRlc3NvdXMgOlwiLFxuICAgIGluZm9zRXhwaXJhdGVkQWRtaW46IFwiQ2V0IGFib25uZW1lbnQgYSBleHBpcsOpLlwiLFxuICAgIGluZm9zTmJEYXlzOiBcIlZvdHJlIGFib25uZW1lbnQgZXN0IGVuY29yZSB2YWxhYmxlIDxiPnBlbmRhbnQgTkJfREFZUyBqb3VyczwvYj4uPGJyPlZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHByb2xvbmdlciB2b3RyZSBhYm9ubmVtZW50IGVuIHN1aXZhbnQgbGVzIGluZGljYXRpb25zIGNpLWRlc3NvdXMgOlwiLFxuICAgIGluZm9zTmJEYXlzQWRtaW46IFwiQ2V0IGFib25uZW1lbnQgZXN0IGVuY29yZSB2YWxhYmxlIDxiPnBlbmRhbnQgTkJfREFZUyBqb3VyczwvYj4uXCIsXG4gICAgaW5mb3NQYXltZW50c0FkbWluIDogXCJEQVRFX1BBWU1FTlQgOiBwYWllbWVudCBkZSBBTU9VTlQg4oKsIGF1IG5vbSBkZSBDTElFTlRfTkFNRS5cIixcbiAgICBpc05vdFZhbGlkZWQgOiBcIkNldCB1dGlsaXNhdGV1ciBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuPGJyPlZvdXMgcG91dmV6IGxlIGZhaXJlIMOgIHNhIHBsYWNlIDxhIGhyZWY9JyN2YWxpZGF0aW9uT2snPmVuIGNvY2hhbnQgbGEgY2FzZSBpbmRpcXXDqWU8L2E+IGV0IGVucmVnaXN0cmFudC5cIixcbiAgICBtYWlsRW5kRnJlZVRpbWVCb2R5SFRNTDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuPGJyPjxicj5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBsZSBzaXRlLCB2b3VzIHBvdXZleiBzb3VzY3JpcmUgw6AgdW4gYWJvbm5lbWVudCBzYW5zIHRhcmRlciBlbiBjbGlxdWFudCBzdXIgbGUgbGllbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBtYWlsRW5kRnJlZVRpbWVCb2R5VHh0OiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy5cXG5cXG5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBsZSBzaXRlLCB2b3VzIHBvdXZleiBzYW5zIGF0dGVuZHJlIHNvdXNjcmlyZSDDoCB1biBhYm9ubmVtZW50IDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxFbmRGcmVlVGltZUxpbmtUeHQgOiBcIk0nYWJvbm5lci5cIixcbiAgICBtYWlsRW5kRnJlZVRpbWVNZXNzYWdlOiBcIiByZWxhbmNlcyBlbnZvecOpZXMuXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lU3ViamVjdDogXCJWb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgdmEgZXhwaXJlclwiLFxuICAgIG1haWxFeHBpcmF0aW9uQm9keUhUTUw6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm90cmUgYWJvbm5lbWVudCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy48YnI+PGJyPlBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIFNJVEVfTkFNRSwgdm91cyBwb3V2ZXogbGUgcHJvbG9uZ2VyIGTDqHMgYXVqb3VyZCdodWkgZW4gY2xpcXVhbnQgc3VyIGxlIGxpZW4gY2ktZGVzc291cy48L3A+XCIsXG4gICAgbWFpbEV4cGlyYXRpb25Cb2R5VHh0OiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdHJlIGFib25uZW1lbnQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuXFxuXFxuUG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgU0lURV9OQU1FLCB2b3VzIHBvdXZleiBsZSBwcm9sb25nZXIgZMOocyBhdWpvdXJkJ2h1aSA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRXhwaXJhdGlvbkxpbmtUeHQgOiBcIlByb2xvbmdlciBtb24gYWJvbm5lbWVudC5cIixcbiAgICBtYWlsRXhwaXJhdGlvbk1lc3NhZ2U6IFwiRklSU1QgcHJlbWnDqHJlcyBldCBTRUNPTkQgZGV1eGnDqG1lcyByZWxhbmNlcyBlbnZvecOpZXMgcG91ciBkZXMgYWJvbm5lbWVudHMgZXhwaXJhbnQgZCdpY2kgcGV1LlwiLFxuICAgIG1haWxFeHBpcmF0aW9uUmVsYXVuY2hUeHQ6IFwiW1JhcHBlbF0gXCIsXG4gICAgbWFpbEV4cGlyYXRpb25TdWJqZWN0OiBcIlZvdHJlIGFib25uZW1lbnQgdmEgYmllbnTDtHQgZXhwaXJlclwiLFxuICAgIG1haWxOZXdFbGVtZW50Rm9yR3JvdXBUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvaWNpIGxlIGxpZW4gdmVycyBsZSBub3V2ZWwgYXJ0aWNsZSDDoCBsaXJlIDpcXG5cXG5RVUVTVElPTk5BSVJFX1VSTFxcblxcbkJvbm5lIGxlY3R1cmUgIVxcblxcblN0b3BwZXIgbGVzIGVudm9pcyA/XFxuVU5TVUJTQ1JJQkVfVVJMXCIsXG4gICAgbWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb2ljaSBsZSBsaWVuIHZlcnMgbGUgbm91dmVhdSBxdWl6IDpcXG5cXG5RVUVTVElPTk5BSVJFX1VSTFxcblxcbkJvbm5lIGxlY3R1cmUgIVxcblxcblN0b3BwZXIgbGVzIGVudm9pcyA/XFxuVU5TVUJTQ1JJQkVfVVJMXCIsXG4gICAgbWFpbFN0b3BNYWlsTGlua1R4dCA6IFwiU3RvcHBlciBsZXMgZW52b2lzLlwiLFxuICAgIG5lZWRLbm93SWZOb3RpY2VPayA6IFwiSWwgbWFucXVlIGwnaW5mb3JtYXRpb24gc3VyIGwnYWNjZXB0YXRpb24gb3Ugbm9uIGRlIHJlY2V2b2lyIGRlcyBub3RpZmljYXRpb25zLlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyT2ZEYXlzIDogXCJMZSBub21icmUgZGUgam91cnMgZGUgbCdhYm9ubmVtZW50IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWluTnVtYmVyT2ZEYXlzIDogXCJMZSBub21icmUgZGUgam91cnMgZGUgbCdhYm9ubmVtZW50IG5lIHBldXQgw6p0cmUgbsOpZ2F0aWYgIVwiLFxuICAgIG5lZWROb3RUb29Mb25nRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdCAodHJvcCBsb25ndWUpLlwiLFxuICAgIG5lZWROdW1iZXJPZkRheXMgOiBcIklsIGZhdXQgdW4gbm9tYnJlIGRlIGpvdXJzIHBvdXIgbCdhYm9ubmVtZW50LlwiLFxuICAgIG5lZWRVbmlxdWVEYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0LiBEb3VibG9uIDogXCIsXG4gICAgbmVlZFZhbGlkRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdC4gQ2FyYWN0w6hyZSBub24gdmFsaWRlIDogXCIsXG4gICAgbm9OZXdRdWVzdGlvbm5haXJlRm9yVXNlciA6IFwiQXVjdW4gbm91dmVhdSBxdWVzdGlvbm5haXJlIHRyb3V2w6kgcG91ciB1biBhYm9ubsOpIDogXCIsXG4gICAgdW5zdWJzY3JpcHRpb25PayA6IFwiVm90cmUgZGVtYW5kZSBhIGJpZW4gw6l0w6kgcHJpc2UgZW4gY29tcHRlLiBWb3VzIG5lIHJlY2V2cmV6IHBsdXMgZGUgbWVzc2FnZXMgdmVuYW50IGR1IHNpdGUsIHNhdWYgcG91ciB2b3VzIHNpZ25hbGVyIGxhIGZpbiBkZSB2b3RyZSBhYm9ubmVtZW50Ljxicj5OJ2jDqXNpdGV6IHBhcyA8YSBocmVmPScvI1VSTCc+w6AgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlPC9hPiBwb3VyIGRlIG5vdXZlYXUgYXV0b3Jpc2VyIGNlcnRhaW5zIGVudm9pcy5cIixcbiAgICB1bnN1YnNjcmlwdGlvbkZhaWwgOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGxpZW4gZGUgZMOpc2Fib25uZW1lbnQgbmUgZm9uY3Rpb25uZSBwYXMuPGJyPlZvdXMgcG91dmV6IDxhIGhyZWY9Jy8jVVJMJz5hY2PDqWRlciDDoCB2b3RyZSBjb21wdGU8L2E+IHBvdXIgZMOpc2FjdGl2ZXIgbGVzIGVudm9pcyBtYW51ZWxsZW1lbnQuXCJcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBERSBTQUlTSVIgLyDDiURJVEVSIExFUyBJTkZPUyBERVMgVVRJTElTQVRFVVJTIEVUIERFIExFVVIgQUJPTk5FTUVOVFxuXG4vLy8gVsOpcmlmaWUgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2UgdmVycyBsZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24gc2kgY2Ugbidlc3QgcGFzIGxlIGNhcy5cbi8vLyBTaSBjJ2VzdCBvaywgcHJvcG9zZSB1biBtb3RldXIgZGUgcmVjaGVyY2hlIHBlcm1ldHRhbnQgZGUgY2hlcmNoZXIgdW4gdXRpbGlzYXRldXJcbi8vLyBTaSB1biBpZCBlc3QgcGFzc8OpIHBhciBsJ3VybCBvbiBhZmZpY2hlIGxlcyBpbmZvcm1hdGlvbnMgZGUgbCd1dGlsaXNhdGV1ciBkYW5zIHVuIGZvcm11bGFpcmUgcGVybWV0dGFudCBkZSBsJ8OpZGl0ZXIvc3VwcHJpbWVyLlxuLy8vIFNpIHBhcyBkJ2lkIHBhc3PDqSBwYXIgbCd1cmwsIG9uIGFmZmljaGUgdW4gZm9ybXVsYWlyZSB2aWRlIHBlcm1ldHRhbnQgZCdlbiBzYWlzaXIgdW4gbm91dmVsIHV0aWxpc2F0ZXVyXG5cbi8vLyDDgCBham91dGVyIDogXG4vLy8gLSBpbXBvcnRhdGlvbiBsaXN0ZSBkZSBjb21wdGVzIHV0aWxpc2F0ZXVyIMOgIGNyw6llclxuLy8vIC0gYXR0cmlidXRpb24gZCd1biBwYXJyYWluIMOgIHVuIHV0aWxpc2F0ZXVyICh2aWEgdW4gbW90ZXVyIGRlIHJlY2hlcmNoZSkuIETDqWrDoCBwcsOpdnUgcGFyIGxlIGNvbnRyw7RsZXVyLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdVc2VycyA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvdXNlcnMuanNcIik7XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gRm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBlbXB5Rm9ybSwgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgZGF0ZUZvcm1hdCwgZ2V0UGFzc3dvcmQsIGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHsgYWRkT2tNZXNzYWdlLCBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBpbmZvc0FkbWluR29kZmF0aGVyLCBpbmZvc0FkbWluTmJHb2RDaGlsZHMsIGluZm9zVXNlckZvckFkbWluLCBuZWVkQmVDb25uZWN0ZWQsIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuY29uc3QgeyBpbmZvc0V4cGlyYXRlZEFkbWluLCBpbmZvc05iRGF5c0FkbWluLCBpbmZvc1BheW1lbnRzQWRtaW4sIGlzTm90VmFsaWRlZCB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9zdWJzY3JpcHRpb25cIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBkaXZNYWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZGl2Q3Jhc2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNyYXNoXCIpO1xuY29uc3QgZGl2U3Vic2NyaWJlSW50cm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1YnNjcmliZUludHJvXCIpO1xuY29uc3QgZGl2UGF5bWVudHNJbmZvcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5mb3NQYXltZW50c1wiKTtcbmNvbnN0IGRpdkdvZGNoaWxkc0luZm9zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbmZvc0dvZGNoaWxkc1wiKTtcbmNvbnN0IGZvcm1Vc2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ1c2Vyc1wiKTtcbmNvbnN0IGRlbGV0ZUNoZWNrQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWxldGVPa0xhYmVsXCIpO1xuY29uc3QgdmFsaWRhdGlvbkNoZWNrQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ2YWxpZGF0aW9uT2tMYWJlbFwiKTtcbmNvbnN0IGJ0bk5ld1VzZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndhbnROZXdVc2VyXCIpO1xuY29uc3QgbmV3UGFzc3dvcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5ld1Bhc3N3b3JkXCIpO1xuY29uc3QgdGltZURpZmZlcmVuY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRpbWVEaWZmZXJlbmNlXCIpO1xuY29uc3QgZm9ybVNlYXJjaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VhcmNoVXNlcnNcIik7XG5jb25zdCBkaXZTZWFyY2hSZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlYXJjaFJlc3VsdFwiKTtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1wibWFuYWdlclwiLCBcImFkbWluXCJdLCBcIi9cIitjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSwgeyBtZXNzYWdlOiBuZWVkQmVDb25uZWN0ZWQsIGNvbG9yOlwiZXJyb3JcIiB9LCB3aW5kb3cubG9jYXRpb24pO1xuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKTtcbiAgICAgICAgICAgIGRpdk1haW4uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAgLy8gSW5pdGlhbGlzYXRpb24gZHUgZm9ybXVsYWlyZSBkZSByZWNoZXJjaGUgOlxuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1VzZXJzLCBmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRm9uY3Rpb24gdXRpbGUgcG91ciB2aWRlciBsZSBmb3JtdWxhaXJlLCB5IGNvbXByaXMgbGVzIGNoYW1wcyBoaWRkZW4sIGV0Yy5cbiAgICAgICAgICAgIC8vIENhY2hlIGF1c3NpIGNlcnRhaW5zIGNoYW1wcyBlbiBtb2RlIGNyw6lhdGlvblxuICAgICAgICAgICAgY29uc3QgZW1wdHlVc2VyRm9ybSA9ICgpID0+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW1weUZvcm0oZm9ybVVzZXIpO1xuICAgICAgICAgICAgICAgIC8vIENhc2UgZGUgc3VwcHJlc3Npb24gY2FjaMOpZSBwYXIgZMOpZmF1dCwgY2FyIGludXRpbGUgcG91ciBmb3JtdWxhaXJlIGRlIGNyw6lhdGlvblxuICAgICAgICAgICAgICAgIGRlbGV0ZUNoZWNrQm94LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgLy8gQ2FzZSBkZSB2YWxpZGF0aW9uIGNhY2jDqWUgcGFyIGTDqWZhdXQsIGNhciB1dGlsZSBxdWUgZGFucyBjZXJ0YWlucyBjYXNcbiAgICAgICAgICAgICAgICB2YWxpZGF0aW9uQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICBkaXZTdWJzY3JpYmVJbnRyby5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICBkaXZQYXltZW50c0luZm9zLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgIGRpdkdvZGNoaWxkc0luZm9zLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgIC8vIENlcnRhaW5zIG5hdmlnYXRldXJzIG9udCB0ZW5kYW5jZSDDoCByZW1wbGlyIHRvdXQgc2V1bCBsZXMgY2hhbXBzIGNvbmZpZ1VzZXJzLnBhc3N3b3JkXG4gICAgICAgICAgICAgICAgbmV3UGFzc3dvcmQudmFsdWU9XCJcIjtcbiAgICAgICAgICAgICAgICAvLyBFbiBtb2RlIGNyw6lhdGlvbiwgcGFzIGRlIGNoYW1wIHBvdXIgY2hhbmdlciBsZSBtb3QgZGUgcGFzc2VcbiAgICAgICAgICAgICAgICBuZXdQYXNzd29yZC5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgLy8gSW51dGlsZSBlbiBtb2RlIGNyw6lhdGlvblxuICAgICAgICAgICAgICAgIHRpbWVEaWZmZXJlbmNlLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVtcHR5VXNlckZvcm0oKTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpc2UgbGVzIGNvbnRyYWludGVzIGR1IGZvcm11bGFpcmUgOlxuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1VzZXJzLCBmb3JtVXNlcik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEZvbmN0aW9uIGFmZmljaGFudCBsZXMgaW5mb3MgY29ubnVlcyBjb25jZXJuYW50IHVuIHV0aWxpc2F0ZXVyIGV0IHNvbiBhYm9ubmVtZW50XG4gICAgICAgICAgICBjb25zdCBzaG93Rm9ybVVzZXJJbmZvcyA9IChpZCkgPT5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBvbiBjb21tZW5jZSBwYXIgdG91dCB2aWRlciwgZGVzIGZvaXMgcXVlLi4uIDpcbiAgICAgICAgICAgICAgICBlbXB0eVVzZXJGb3JtKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyR2V0SW5mb3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLmdldFVzZXJJbmZvcytpZCk7XG4gICAgICAgICAgICAgICAgeGhyR2V0SW5mb3Mub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5Vc2VyICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXNzd29yZC5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVEaWZmZXJlbmNlLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRF9VU0VSIDogcmVzcG9uc2UuVXNlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURV9DUkVBIDogZGF0ZUZvcm1hdChyZXNwb25zZS5Vc2VyLmNyZWF0ZWRBdCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfVVBEQVRFIDogZGF0ZUZvcm1hdChyZXNwb25zZS5Vc2VyLnVwZGF0ZWRBdCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfQ09OTkVDVElPTiA6IGRhdGVGb3JtYXQocmVzcG9uc2UuVXNlci5jb25uZWN0ZWRBdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpYmVJbnRybz1yZXBsYWNlQWxsKGluZm9zVXNlckZvckFkbWluLCBtYXBUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGRhdGEgaW4gcmVzcG9uc2UuVXNlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1Vc2VyLmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5Vc2VyW2RhdGFdIT09dHJ1ZSAmJiByZXNwb25zZS5Vc2VyW2RhdGFdIT09ZmFsc2UpLy8gYm9vbMOpZW4gPSBjYXNlIMOgIGNvY2hlciAhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVVzZXIuZWxlbWVudHNbZGF0YV0udmFsdWU9cmVzcG9uc2UuVXNlcltkYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLlVzZXJbZGF0YV09PXRydWUpIC8vIHNpIGZhbHNlLCBvbiBuZSBmYWl0IHJpZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtVXNlci5lbGVtZW50c1tcIlwiK2RhdGFdLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuU3Vic2NyaXB0aW9uICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVVzZXIuZWxlbWVudHNbXCJudW1iZXJPZkRheXNcIl0udmFsdWU9cmVzcG9uc2UuU3Vic2NyaXB0aW9uW1wibnVtYmVyT2ZEYXlzXCJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqb3VycyBkZSByw6ljZXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5TdWJzY3JpcHRpb24ucmVjZWlwdERheXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtVXNlci5lbGVtZW50c1tcImRcIityZXNwb25zZS5TdWJzY3JpcHRpb24ucmVjZWlwdERheXNbaV1dLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZ2luU3ViVFM9bmV3IERhdGUocmVzcG9uc2UuU3Vic2NyaXB0aW9uLmNyZWF0ZWRBdCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5TdWJzY3JpcHRpb24ubnVtYmVyT2ZEYXlzICE9PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYkRheXNPaz1yZXNwb25zZS5TdWJzY3JpcHRpb24ubnVtYmVyT2ZEYXlzLU1hdGgucm91bmQoKERhdGUubm93KCktYmVnaW5TdWJUUykvMTAwMC8zNjAwLzI0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5iRGF5c09rID4gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVJbnRybys9XCI8YnI+XCIraW5mb3NOYkRheXNBZG1pbi5yZXBsYWNlKFwiTkJfREFZU1wiLCBuYkRheXNPayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlSW50cm8rPVwiPGJyPmRkXCIraW5mb3NFeHBpcmF0ZWRBZG1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlN1YnNjcmliZUludHJvLCBcInBcIiwgc3Vic2NyaWJlSW50cm8sIFwiXCIsIFtcImluZm9cIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTdWJzY3JpYmVJbnRybywgXCJwXCIsIGlzTm90VmFsaWRlZCwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNoZWNrQm94LnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZm9zIGRlIHBhaWVtZW50cyB2aWEgQVBJIFdQXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyR2V0UGF5bWVudHNJbmZvcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldFBheW1lbnRzSW5mb3Mub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMuZ2V0UGF5bWVudHMrcmVzcG9uc2UuVXNlci5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0UGF5bWVudHNJbmZvcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZVBheT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlUGF5Lmxlbmd0aCE9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHh0UGF5bWVudHM9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlUGF5KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRFX1BBWU1FTlQgOiBkYXRlRm9ybWF0KHJlc3BvbnNlUGF5W2ldLmNyZWF0ZWRBdCwgXCJmclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTU9VTlQgOiByZXNwb25zZVBheVtpXS5hbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xJRU5UX05BTUUgOiByZXNwb25zZVBheVtpXS5jbGllbnROYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0UGF5bWVudHMrPVwiPGxpPlwiK3JlcGxhY2VBbGwoaW5mb3NOYkRheXNBZG1pbiwgbWFwVGV4dCkrXCI8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UGF5bWVudHNJbmZvcywgXCJ1bFwiLCB0eHRQYXltZW50cywgXCJcIiwgW1wiaW5mb1wiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZQYXltZW50c0luZm9zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldFBheW1lbnRzSW5mb3Muc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0UGF5bWVudHNJbmZvcy5zZW5kKCk7ICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbiBwYXJyYWluIG91IGRldXggcGFyIGRldXggP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHJlc3BvbnNlLlVzZXIuR29kZmF0aGVySWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyR2V0R29kRmF0aGVySW5mb3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kRmF0aGVySW5mb3Mub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5nZXRVc2VySW5mb3MrcmVzcG9uc2UuVXNlci5Hb2RmYXRoZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZEZhdGhlckluZm9zLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZUdGPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlR0YuVXNlciAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdkdvZGNoaWxkc0luZm9zLCBcInBcIiwgaW5mb3NBZG1pbkdvZGZhdGhlcitcIjxhIGhyZWY9Jy9cIitjb25maWdUZW1wbGF0ZS51c2Vyc01hbmFnZW1lbnRQYWdlK1wiP2lkPVwiK3Jlc3BvbnNlR0YuVXNlci5pZCtcIic+XCIrcmVzcG9uc2VHRi5Vc2VyLm5hbWUrXCI8L2E+XCIrXCIuPGJyPlwiLCBcIlwiLCBbXCJpbmZvXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdkdvZGNoaWxkc0luZm9zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RGYXRoZXJJbmZvcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZEZhdGhlckluZm9zLnNlbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXMgZmlsbGV1bHMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0eHRHb2RjaGlsZHM9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJHZXRHb2RjaGlsZHMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5nZXRHb2RDaGlsZHMraWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZGNoaWxkcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZUdTPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2VHUy5sZW5ndGghPT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0R29kY2hpbGRzKz1pbmZvc0FkbWluR29kZmF0aGVyLnJlcGxhY2UoXCIjTkJcIiwgcmVzcG9uc2VHUy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2VHUylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dEdvZGNoaWxkcys9XCI8YSBocmVmPScvXCIrY29uZmlnVGVtcGxhdGUudXNlcnNNYW5hZ2VtZW50UGFnZStcIj9pZD1cIityZXNwb25zZUdTW2ldLmlkK1wiJz5cIityZXNwb25zZUdTW2ldLm5hbWUrXCI8L2E+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2R29kY2hpbGRzSW5mb3MsIFwicFwiLCB0eHRHb2RjaGlsZHMrXCIuXCIsIFwiXCIsIFtcImluZm9cIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2R29kY2hpbGRzSW5mb3Muc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZGNoaWxkcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLnNlbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5zZW5kKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNpIHVuIGlkIGVzdCBwYXNzw6kgcGFyIGwndXJsLCBvbiBlc3NheWUgZCdhZmZpY2hlciBsJ3V0aWxpc2F0ZXVyIDpcbiAgICAgICAgICAgIGxldCB1cmxEYXRhcz1nZXRVcmxQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmKHVybERhdGFzICYmIHVybERhdGFzLmlkIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHNob3dGb3JtVXNlckluZm9zKHVybERhdGFzLmlkKTtcblxuICAgICAgICAgICAgLy8gQmVzb2luIGQndW4gY291cCBkZSBLw6RyY2hlciA/IFxuICAgICAgICAgICAgYnRuTmV3VXNlci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbXB0eVVzZXJGb3JtKCk7XG4gICAgICAgICAgICB9KTsgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRW52b2kgZHUgZm9ybXVsYWlyZSBkZXMgaW5mb3MgZGUgbCd1dGlsaXNhdGV1clxuICAgICAgICAgICAgZm9ybVVzZXIuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1Vc2VyKTtcbiAgICAgICAgICAgICAgICAvLyByZWNvbXBvc2l0aW9uIGRlcyBqb3VycyB2YWxhYmxlcyBwb3VyIGwnYWJvbm5lbWVudCA6XG4gICAgICAgICAgICAgICAgZGF0YXMucmVjZWlwdERheXM9XCJcIjtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGk9MTsgaTw9NzsgaSsrKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXNbXCJkXCIraV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cys9XCJcIitpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB4aHJVc2VyRGF0YXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKGRhdGFzLmRlbGV0ZU9rIT09dW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLm9wZW4oXCJERUxFVEVcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrXCIvXCIrZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpICYmIChkYXRhcy52YWxpZGF0aW9uT2shPT11bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrY29uZmlnVXNlcnMudmFsaWRhdGVVc2VyUm91dGUrZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpKVxuICAgICAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMub3BlbihcIlBVVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy51cGRhdGVVc2VySW5mb3MrZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzLnBhc3N3b3JkPWdldFBhc3N3b3JkKGNvbmZpZ1VzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCwgY29uZmlnVXNlcnMucGFzc3dvcmQubWlubGVuZ3RoKzIpOy8vIG1vdCBkZSBwYXNzZSB0ZW1wb3JhaXJlXG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5jcmVhdGVVc2VyUm91dGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMSAmJiByZXNwb25zZS5pZCE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBhZGRPa01lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzLmlkPXJlc3BvbnNlLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSBzZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpc0VtcHR5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXMuZGVsZXRlT2s9PT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtVXNlckluZm9zKGRhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5VXNlckZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFRyYWl0ZW1lbnQgZHUgbGFuY2VtZW50IGQndW5lIHJlY2hlcmNoZVxuICAgICAgICAgICAgZm9ybVNlYXJjaC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybVNlYXJjaCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyU2VhcmNoID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLnNlYXJjaFVzZXJSb3V0ZSk7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UubGVuZ3RoPT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwicFwiLCBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQsIFwiXCIsIFtcImluZm9cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RIVE1MPVwiPG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0SFRNTCs9XCI8b3B0aW9uIHZhbHVlPSdcIityZXNwb25zZVtpXS5pZCtcIic+XCIrcmVzcG9uc2VbaV0ubmFtZStcIiAoXCIrcmVzcG9uc2VbaV0uZW1haWwrXCIpPC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInNlbGVjdFwiLCBzZWxlY3RIVE1MLCBcInNlbGVjdFNlYXJjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoU2VsZWN0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0U2VhcmNoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNlYXJjaFNlbGVjdC52YWx1ZSE9PVwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1Vc2VySW5mb3Moc2VhcmNoU2VsZWN0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2Q3Jhc2gsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXogb3UgZCd1biBncm91cGUgZGUgcXVpenNcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICAgICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkYXRhcy5Hcm91cElkPWFuc3dlci5Hcm91cElkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21hbmFnZVVzZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91cmwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiZGVmYXVsdFJlY2VpcHREYXlzIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsImZpZWxkTmV3UXVlc3Rpb25uYWlyZXMiLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbiIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4IiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmVzIiwiZGlyV2ViUXVlc3Rpb25uYWlyZXMiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInJlZ2VuZXJhdGVIVE1MIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdyb3VwUm91dGVzIiwiZ2V0R3JvdXBSb3V0ZSIsInByZXZpZXdHcm91cFJvdXRlcyIsInNlYXJjaEdyb3Vwc1JvdXRlIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRBZG1pblN0YXRzIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiR3JvdXAiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwic2VhcmNoIiwic2VhcmNoR3JvdXBzIiwiZGlyQ2FjaGVHcm91cHMiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MR3JvdXBzIiwiZGlySFRNTE5ld3MiLCJkaXJIVE1MVGFncyIsImRpcldlYkdyb3VwcyIsImRpcldlYk5ld3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwidXNlclJvdXRlcyIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJjcmVhdGVVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJnZXRVc2VySW5mb3MiLCJnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hVc2VyUm91dGUiLCJzaWdudXBDb21wbGV0aW9uUm91dGUiLCJzdWJzY3JpYmVSb3V0ZSIsInVuc3Vic2NyaWJlUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwiZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIiwiYWRkQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJiYWRVcmwiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuU2hvd09uV2ViU2l0ZSIsImRlbGV0ZUJ0blR4dCIsImRlbGV0ZUZhaWxNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aENyb24iLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aFRva2VuIiwibmVlZGVkUGFyYW1zIiwibmV4dFBhZ2UiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJub3RWYWxpZEZvcm1hdCIsInByZXZpb3VzUGFnZSIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzY3JpcHRUaW1pbmdJbmZvIiwic3RhdHNBZG1pbiIsInN1YnNjcmlwdGlvbkNhbGwiLCJ1cGRhdGVCdG5UeHQiLCJ1cGRhdGVPa01lc3NhZ2UiLCJhbGxTdWJzY3JpcHRpb25Qcm9jZXNzZWQiLCJpbmZvc0V4cGlyYXRlZCIsImluZm9zRXhwaXJhdGVkQWRtaW4iLCJpbmZvc05iRGF5cyIsImluZm9zTmJEYXlzQWRtaW4iLCJpbmZvc1BheW1lbnRzQWRtaW4iLCJpc05vdFZhbGlkZWQiLCJtYWlsRW5kRnJlZVRpbWVCb2R5SFRNTCIsIm1haWxFbmRGcmVlVGltZUJvZHlUeHQiLCJtYWlsRW5kRnJlZVRpbWVMaW5rVHh0IiwibWFpbEVuZEZyZWVUaW1lTWVzc2FnZSIsIm1haWxFbmRGcmVlVGltZVN1YmplY3QiLCJtYWlsRXhwaXJhdGlvbkJvZHlIVE1MIiwibWFpbEV4cGlyYXRpb25Cb2R5VHh0IiwibWFpbEV4cGlyYXRpb25MaW5rVHh0IiwibWFpbEV4cGlyYXRpb25NZXNzYWdlIiwibWFpbEV4cGlyYXRpb25SZWxhdW5jaFR4dCIsIm1haWxFeHBpcmF0aW9uU3ViamVjdCIsIm1haWxOZXdFbGVtZW50Rm9yR3JvdXBUeHQiLCJtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlUeHQiLCJtYWlsU3RvcE1haWxMaW5rVHh0IiwibmVlZEtub3dJZk5vdGljZU9rIiwibmVlZEludGVnZXJOdW1iZXJPZkRheXMiLCJuZWVkTWluTnVtYmVyT2ZEYXlzIiwibmVlZE5vdFRvb0xvbmdEYXlzTGlzdCIsIm5lZWROdW1iZXJPZkRheXMiLCJuZWVkVW5pcXVlRGF5c0xpc3QiLCJuZWVkVmFsaWREYXlzTGlzdCIsIm5vTmV3UXVlc3Rpb25uYWlyZUZvclVzZXIiLCJ1bnN1YnNjcmlwdGlvbk9rIiwidW5zdWJzY3JpcHRpb25GYWlsIiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExhbmd1YWdlIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJjb25maWdVc2VycyIsImNvbmZpZ1RlbXBsYXRlIiwiZGl2TWFpbiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZNZXNzYWdlIiwiZGl2UmVzcG9uc2UiLCJkaXZDcmFzaCIsImRpdlN1YnNjcmliZUludHJvIiwiZGl2UGF5bWVudHNJbmZvcyIsImRpdkdvZGNoaWxkc0luZm9zIiwiZm9ybVVzZXIiLCJkZWxldGVDaGVja0JveCIsInZhbGlkYXRpb25DaGVja0JveCIsImJ0bk5ld1VzZXIiLCJ0aW1lRGlmZmVyZW5jZSIsImZvcm1TZWFyY2giLCJkaXZTZWFyY2hSZXN1bHQiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJpc0Nvbm5lY3RlZCIsImNoZWNrU2Vzc2lvbiIsIm1lc3NhZ2UiLCJjb2xvciIsIndpbmRvdyIsImxvY2F0aW9uIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwic3R5bGUiLCJkaXNwbGF5IiwiYWRkRWxlbWVudCIsInJlbW92ZUxvY2FseSIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsImVtcHR5VXNlckZvcm0iLCJlbXB5Rm9ybSIsImlubmVySFRNTCIsInBhcmVudE5vZGUiLCJzaG93Rm9ybVVzZXJJbmZvcyIsInhockdldEluZm9zIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIlVzZXIiLCJtYXBUZXh0IiwiSURfVVNFUiIsIkRBVEVfQ1JFQSIsImRhdGVGb3JtYXQiLCJjcmVhdGVkQXQiLCJEQVRFX1VQREFURSIsInVwZGF0ZWRBdCIsIkRBVEVfQ09OTkVDVElPTiIsImNvbm5lY3RlZEF0Iiwic3Vic2NyaWJlSW50cm8iLCJyZXBsYWNlQWxsIiwiZGF0YSIsImVsZW1lbnRzIiwiY2hlY2tlZCIsIlN1YnNjcmlwdGlvbiIsInJlY2VpcHREYXlzIiwiYmVnaW5TdWJUUyIsImdldFRpbWUiLCJudW1iZXJPZkRheXMiLCJuYkRheXNPayIsInJvdW5kIiwibm93IiwieGhyR2V0UGF5bWVudHNJbmZvcyIsInJlc3BvbnNlUGF5IiwidHh0UGF5bWVudHMiLCJEQVRFX1BBWU1FTlQiLCJBTU9VTlQiLCJhbW91bnQiLCJDTElFTlRfTkFNRSIsImNsaWVudE5hbWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwidG9rZW4iLCJzZW5kIiwiR29kZmF0aGVySWQiLCJ4aHJHZXRHb2RGYXRoZXJJbmZvcyIsInJlc3BvbnNlR0YiLCJ0eHRHb2RjaGlsZHMiLCJ4aHJHZXRHb2RjaGlsZHMiLCJyZXNwb25zZUdTIiwidXJsRGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJVc2VyRGF0YXMiLCJkZWxldGVPayIsInZhbGlkYXRpb25PayIsImdldFBhc3N3b3JkIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwic3RyaW5naWZ5IiwieGhyU2VhcmNoIiwic2VsZWN0SFRNTCIsInNlYXJjaFNlbGVjdCIsImNvbnNvbGUiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJsaW5rIiwiaG9tZVBhZ2UiLCJpbnB1dHNDb25mIiwibXlGb3JtIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWUiLCJlbnRyaWVzIiwidHlwZSIsImVtcHlBbmRIaWRlRm9ybSIsInBhcmFtZXRlcnMiLCJzcGxpdCIsInBhcmFtIiwiZGVjb2RlVVJJIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsImFzc2lnbiIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyxtQ0FBRCxD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T0FBakIsRUFBMEI2SSxTQUExQixDQUFaO0FBQ0FFLHFCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixXQWxDRCxNQW9DQTtBQUNJcEksa0ZBQVksQ0FBQyxNQUFELENBQVo7QUFDQXVJLHdCQUFZLENBQUNOLGNBQUQsRUFBaUI1SSxPQUFqQixFQUEwQjZJLFNBQTFCLENBQVo7QUFDQUUsbUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLFNBNUNEOztBQTZDQUksV0FBRyxDQUFDTyxPQUFKLEdBQWMsTUFBTVYsTUFBTSxDQUFDRyxHQUFHLENBQUNRLFVBQUwsQ0FBMUI7O0FBQ0FSLFdBQUcsQ0FBQ3RGLElBQUo7QUFDSDtBQUNKO0FBQ0osR0F0RU0sQ0FBUDtBQXVFSCxDQXpFTSxDLENBMEVQOztBQUNBLE1BQU1xRixZQUFZLEdBQUcsQ0FBQ04sY0FBRCxFQUFpQjVJLE9BQWpCLEVBQTBCNkksU0FBMUIsS0FDckI7QUFDSSxNQUFHLENBQUN6UCwyREFBTyxDQUFDNEcsT0FBRCxDQUFYLEVBQ0l3RixvRUFBVSxDQUFDLFNBQUQsRUFBWXhGLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQzVHLDJEQUFPLENBQUN5UCxTQUFELENBQVgsRUFDSXJELG9FQUFVLENBQUMsS0FBRCxFQUFRcUQsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDelAsMkRBQU8sQ0FBQ3dQLGNBQUQsQ0FBWCxFQUNJMUksTUFBTSxDQUFDQyxRQUFQLENBQWdCc0osTUFBaEIsQ0FBdUJiLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvbWFuYWdlVXNlcnMuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbWFuYWdlVXNlcnMuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3N1YnNjcmlwdGlvblwiOiBcIi4uL2xhbmcvZnIvc3Vic2NyaXB0aW9uLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvc3Vic2NyaXB0aW9uJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIDogXCJUb3VzIGxlcyBhYm9ubsOpcyBvbnQgw6l0w6kgdHJhaXTDqXMgcG91ciBsZSBtb21lbnQuXCIsXG4gICAgaW5mb3NFeHBpcmF0ZWQ6IFwiVm90cmUgYWJvbm5lbWVudCBhIGV4cGlyw6ksIG1haXMgaWwgdm91cyByZXN0ZSBlbmNvcmUgcXVlbHF1ZXMgam91cnMgYXZhbnQgcXVlIHZvdHJlIGNvbXB0ZSBldCB2b3MgZG9ubsOpZXMgbmUgc29pZW50IGNvbXBsw6h0ZW1lbnQgc3VwcHJpbcOpZXMuPGJyPlBvdXIgY2UgZmFpcmUsIHN1aXZleiBzYW5zIHRhcmRlciBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NFeHBpcmF0ZWRBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBhIGV4cGlyw6kuXCIsXG4gICAgaW5mb3NOYkRheXM6IFwiVm90cmUgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi48YnI+Vm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgcHJvbG9uZ2VyIHZvdHJlIGFib25uZW1lbnQgZW4gc3VpdmFudCBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NOYkRheXNBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi5cIixcbiAgICBpbmZvc1BheW1lbnRzQWRtaW4gOiBcIkRBVEVfUEFZTUVOVCA6IHBhaWVtZW50IGRlIEFNT1VOVCDigqwgYXUgbm9tIGRlIENMSUVOVF9OQU1FLlwiLFxuICAgIGlzTm90VmFsaWRlZCA6IFwiQ2V0IHV0aWxpc2F0ZXVyIG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS48YnI+Vm91cyBwb3V2ZXogbGUgZmFpcmUgw6Agc2EgcGxhY2UgPGEgaHJlZj0nI3ZhbGlkYXRpb25Payc+ZW4gY29jaGFudCBsYSBjYXNlIGluZGlxdcOpZTwvYT4gZXQgZW5yZWdpc3RyYW50LlwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlIVE1MOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy48YnI+PGJyPlBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNvdXNjcmlyZSDDoCB1biBhYm9ubmVtZW50IHNhbnMgdGFyZGVyIGVuIGNsaXF1YW50IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLlxcblxcblBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNhbnMgYXR0ZW5kcmUgc291c2NyaXJlIMOgIHVuIGFib25uZW1lbnQgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lTGlua1R4dCA6IFwiTSdhYm9ubmVyLlwiLFxuICAgIG1haWxFbmRGcmVlVGltZU1lc3NhZ2U6IFwiIHJlbGFuY2VzIGVudm95w6llcy5cIixcbiAgICBtYWlsRW5kRnJlZVRpbWVTdWJqZWN0OiBcIlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCB2YSBleHBpcmVyXCIsXG4gICAgbWFpbEV4cGlyYXRpb25Cb2R5SFRNTDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSBhYm9ubmVtZW50IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLjxicj48YnI+UG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgU0lURV9OQU1FLCB2b3VzIHBvdXZleiBsZSBwcm9sb25nZXIgZMOocyBhdWpvdXJkJ2h1aSBlbiBjbGlxdWFudCBzdXIgbGUgbGllbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBtYWlsRXhwaXJhdGlvbkJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm90cmUgYWJvbm5lbWVudCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy5cXG5cXG5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBTSVRFX05BTUUsIHZvdXMgcG91dmV6IGxlIHByb2xvbmdlciBkw6hzIGF1am91cmQnaHVpIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxFeHBpcmF0aW9uTGlua1R4dCA6IFwiUHJvbG9uZ2VyIG1vbiBhYm9ubmVtZW50LlwiLFxuICAgIG1haWxFeHBpcmF0aW9uTWVzc2FnZTogXCJGSVJTVCBwcmVtacOocmVzIGV0IFNFQ09ORCBkZXV4acOobWVzIHJlbGFuY2VzIGVudm95w6llcyBwb3VyIGRlcyBhYm9ubmVtZW50cyBleHBpcmFudCBkJ2ljaSBwZXUuXCIsXG4gICAgbWFpbEV4cGlyYXRpb25SZWxhdW5jaFR4dDogXCJbUmFwcGVsXSBcIixcbiAgICBtYWlsRXhwaXJhdGlvblN1YmplY3Q6IFwiVm90cmUgYWJvbm5lbWVudCB2YSBiaWVudMO0dCBleHBpcmVyXCIsXG4gICAgbWFpbE5ld0VsZW1lbnRGb3JHcm91cFR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm9pY2kgbGUgbGllbiB2ZXJzIGxlIG5vdXZlbCBhcnRpY2xlIMOgIGxpcmUgOlxcblxcblFVRVNUSU9OTkFJUkVfVVJMXFxuXFxuQm9ubmUgbGVjdHVyZSAhXFxuXFxuU3RvcHBlciBsZXMgZW52b2lzID9cXG5VTlNVQlNDUklCRV9VUkxcIixcbiAgICBtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvaWNpIGxlIGxpZW4gdmVycyBsZSBub3V2ZWF1IHF1aXogOlxcblxcblFVRVNUSU9OTkFJUkVfVVJMXFxuXFxuQm9ubmUgbGVjdHVyZSAhXFxuXFxuU3RvcHBlciBsZXMgZW52b2lzID9cXG5VTlNVQlNDUklCRV9VUkxcIixcbiAgICBtYWlsU3RvcE1haWxMaW5rVHh0IDogXCJTdG9wcGVyIGxlcyBlbnZvaXMuXCIsXG4gICAgbmVlZEtub3dJZk5vdGljZU9rIDogXCJJbCBtYW5xdWUgbCdpbmZvcm1hdGlvbiBzdXIgbCdhY2NlcHRhdGlvbiBvdSBub24gZGUgcmVjZXZvaXIgZGVzIG5vdGlmaWNhdGlvbnMuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZiAhXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdEYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0ICh0cm9wIGxvbmd1ZSkuXCIsXG4gICAgbmVlZE51bWJlck9mRGF5cyA6IFwiSWwgZmF1dCB1biBub21icmUgZGUgam91cnMgcG91ciBsJ2Fib25uZW1lbnQuXCIsXG4gICAgbmVlZFVuaXF1ZURheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQuIERvdWJsb24gOiBcIixcbiAgICBuZWVkVmFsaWREYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0LiBDYXJhY3TDqHJlIG5vbiB2YWxpZGUgOiBcIixcbiAgICBub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIDogXCJBdWN1biBub3V2ZWF1IHF1ZXN0aW9ubmFpcmUgdHJvdXbDqSBwb3VyIHVuIGFib25uw6kgOiBcIixcbiAgICB1bnN1YnNjcmlwdGlvbk9rIDogXCJWb3RyZSBkZW1hbmRlIGEgYmllbiDDqXTDqSBwcmlzZSBlbiBjb21wdGUuIFZvdXMgbmUgcmVjZXZyZXogcGx1cyBkZSBtZXNzYWdlcyB2ZW5hbnQgZHUgc2l0ZSwgc2F1ZiBwb3VyIHZvdXMgc2lnbmFsZXIgbGEgZmluIGRlIHZvdHJlIGFib25uZW1lbnQuPGJyPk4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy8jVVJMJz7DoCBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGU8L2E+IHBvdXIgZGUgbm91dmVhdSBhdXRvcmlzZXIgY2VydGFpbnMgZW52b2lzLlwiLFxuICAgIHVuc3Vic2NyaXB0aW9uRmFpbCA6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgbGllbiBkZSBkw6lzYWJvbm5lbWVudCBuZSBmb25jdGlvbm5lIHBhcy48YnI+Vm91cyBwb3V2ZXogPGEgaHJlZj0nLyNVUkwnPmFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZTwvYT4gcG91ciBkw6lzYWN0aXZlciBsZXMgZW52b2lzIG1hbnVlbGxlbWVudC5cIlxufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqSBhdSBzaXRlICFcIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBiYWRQYXNzd29yZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbmUgY29ycmVzcG9uZCBhdXggaW5mb3JtYXRpb25zIHNhaXNpZXMuXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsIFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgZmFpbEJvdFRlc3Q6IFwiVW4gcHJvYmzDqG1lIGEgw6l0w6kgcmVuY29udHLDqSBkdXJhbnQgdm90cmUgaW5zY3JpcHRpb24uIEVuIGNhcyBkZSBkaWZmaWN1bHTDqSwgbidow6lzaXRleiBwYXMgY29udGFjdGVyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBmYWlsQm90VGVzdExvZzogXCJVbmUgaW5zY3JpcHRpb24gYSDDqXTDqSBibG9xdcOpZSwgcGFyY2UgcXVlIGxlIGNoYW1wIGVtYWlsMiDDqXRhaXQgcmVuc2VpZ27DqSBhdmVjIDogXCIsXG4gICAgZm9ybXNFbWFpbExhYmVsOiBcIkUtbWFpbCA6XCIsXG4gICAgZm9ybXNFbWFpbFBsYWNlaG9sZGVyOiBcIlZvdHJlIGFkcmVzc2UgZS1tYWlsXCIsXG4gICAgZm9ybXNFbWFpbDJQbGFjZWhvbGRlcjogXCJTaSB2b3VzIHZveWV6IGNlIGNoYW1wLCBsYWlzc2V6LWxlIHZpZGVcIiwvL2NoYW1wIHF1aSBuZSBkZXZyYWl0IHBhcyDDqnRyZSB2aXNpYmxlIHBhciBkZXMgaHVtYWluc1xuICAgIGZvcm1zQ0dVT2tMYWJlbDogXCJKJ2FjY2VwdGUgPGEgaHJlZj0jbGluayB0YXJnZXQ9XFxcIl9ibGFua1xcXCIgcmVsPVxcXCJub29wZW5lclxcXCIgdGl0bGU9XFxcIsOAIGxpcmUgOilcXFwiPmxlcyBDb25kaXRpb25zIEfDqW7DqXJhbGUgZCdVdGlsaXNhdGlvbjwvYT4gZHUgc2l0ZSAocmVxdWlzKS5cIixcbiAgICBmb3Jtc1N1Ym1pdFR4dDogXCJKZSBtJ2Fib25uZSAhXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgXFxcInBhcnJhaW5cXFwiIGEgYmllbiDDqXTDqSB0cm91dsOpLiBDZXR0ZSBwZXJzb25uZSBzZXJhIGF2ZXJ0aWUgcXVlIHZvdXMgbCdhdmV6IGTDqXNpZ27DqWUuXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiRMOpc29sw6kgbWFpcyBhdWN1biB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNlIGNvZGUgLyBlLW1haWwgZGUgcGFycmFpbmFnZSA6KFwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVscyA6IFwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NVc2VyTmJHb2RDaGlsZHM6IFwiVm9pY2kgbGVzICNOQiB1dGlsaXNhdGV1cihzKSBpbnNjcml0KHMpIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIgOiBcIixcbiAgICBpbmZvc1VzZXJOb0dvZGNoaWxkczogXCJQb3VyIGwnaW5zdGFudCwgYXVjdW5lIHBlcnNvbm5lIG5lIHMnZXN0IGluc2NyaXRlLCBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiLlwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBhIGV4cGlyw6kuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCAqVElNSU5HKiAhXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjxicj5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLjwvcD48cD5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuU2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy5cXG5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlLW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+Ljxicj5FbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb25cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtUeHQgOiBcIlZhbGlkZXIgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0IEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkJ8OqdHJlIGVudm95w6kgw6Agdm90cmUgYWRyZXNzZSBlLW1haWwgKCNFTUFJTCkuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgITxicj48YnI+U2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIDxiPkVNQUlMPC9iPi48YnI+PGJyPkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIDxiPkVNQUlMPC9iPiDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyA8Yj5wb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT48L2I+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuPGJyPjxicj5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIGNpLWRlc3NvdXMuPGJyPjxicj7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGUgY29udGVudSBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuXFxuXFxuUG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBzdWl2YW50IDogTElOS19VUkxcXG5cXG7DgCBiaWVudMO0dCBzdXIgTk9NX1NJVEUuXCIsXG4gICAgbWFpbFdlbGNvbWVMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgdW4gc2VydmV1ciBTTVRQIHZhbGlkZS5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiTWVyY2kgZCdhY2NlcHRlciBsZXMgQ0dVIHBvdXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGNvbXB0ZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSBwb3V2b2lyIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBub3V2ZWF1IGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgbGUgcHJlc3NlLXBhcGllciBkZSB2b3RyZSBvcmRpbmF0ZXVyIChvdSBtb2JpbGUpLiBWb3VzIHBvdXZleiBsZSBcXFwiY29sbGVyXFxcIiBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgc2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0OiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJEw6lzb2zDqSBtYWlzIGlsIHkgYSBldSB0cm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdGV6IG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLiBWb3VzIHBvdXZleiB2b3VzIHkgY29ubmVjdGVyIDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBjb21wbMOpdGVyIGxlcyBpbmZvcm1hdGlvbnMgZGUgdm90cmUgYWJvbm5lbWVudCBjaS1kZXNzb3VzLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIuKAplwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxuXG4gICAgLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4gICAgLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG4gICAgc3RhdGljIGdldFBhc3N3b3JkIChuYkNhck1pbiwgbmJDYXJNYXgpXG4gICAge1xuICAgICAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgICAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgICAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgICAgICB9XG4gICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICByZXR1cm4gcGFzc3dvcmQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBsaWVucyBkZSBsJ2ludGVyZmFjZVxuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9uc1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIsIHRpdGxlOlwiQWNjw6lkZXIgb3UgY3LDqWV6IHZvdHJlIGNvbXB0ZSBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiLCB0aXRsZTpcIkVuIHNhdm9pciArIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiLCB0aXRsZTpcIlBhZ2UgZCdhY2N1ZWlsXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkxlIGJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiwgdGl0bGU6XCJRdWkgYSBjcsOpw6kgV2lraUxlcm5pID8gUXVlbHMgc29udCB2b3MgZHJvaXRzID9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiLCB0aXRsZTpcIlZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZTogXCJhZG1pbi5odG1sXCIsXG4gICAgY2d1UGFnZTogXCJDR1YtQ0dVLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLCAgICBcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2VUeHQgOiBcIk1hIHBhZ2UgZCdhY2N1ZWlsLlwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgLyogVGV4dGVzIChnw6luw6lyYWwpICovXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbiAgICBsaWNlbmNlVHh0OiBcIkBjb3B5bGVmdCBMZSBjb250ZW51IGRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgP1xcXCI+ZXN0IGxpYnJlPC9hPiBldCB2b3VzIGVzdCBvZmZlcnQgc2FucyBwdWJsaWNpdMOpLiBWb3VzIHBvdXZleiA8YSBocmVmPVxcXCIvcGFydGljaXBlci1maW5hbmNlbWVudC5odG1sXFxcIiB0aXRsZT1cXFwiRmluYW5jZW1lbnQgcGFydGljaXBhdGlmIGF2ZWMgY29udHJlLXBhcnRpZXNcXFwiPnBhcnRpY2lwZXIgw6Agc29uIGZpbmFuY2VtZW50IGVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgLyogUGFnZSBkJ2FjY3VlaWwgKi9cbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiPGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+Ljxicj5Wb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzLCBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLjxicj5EZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgPGI+ZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgY3VsdHVyZSBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBqYXJkaW48L2I+LlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIjxiPlBhcyBkZSBmYWl0cyBhbHRlcm5hdGlmczwvYj4sIHRvdXMgbGVzIGNvbnRlbnVzIHNvbnQgPGI+c291cmPDqXMgcGFyIGRlcyBhcnRpY2xlcyBXaWtpcMOpZGlhPC9iPi48YnI+RXQgdG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwdWJsacOpIHN1ciBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzIHN1ciBjZSBzdWpldFxcXCI+c29udCBwYXJ0YWfDqXMgc291cyBsaWNlbmNlcyBsaWJyZXM8L2E+Ljxicj5MZSB0b3V0IHNhbnMgcHVibGljaXTDqSwgbmkgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzLjxicj48Yj5TdXIgV2lraUxlcm5pLCB2b3VzIGN1bHRpdmV6IHZvdHJlIGphcmRpbiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjwvYj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSA/XCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogIFwiVGVzdGV6IFdpa2lMZXJuaVwiLFxuICAgIGhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZTogIFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIC8qIFBhZ2UgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuLi4gKi8gICBcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIldpa2lMZXJuaSA6IHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiPHA+PGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgcXVlbHF1ZSBjaG9zZSBkZSBub3V2ZWF1PC9iPjxicj5TaSBkZXNzb3VzIGxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4gVm91cyBwb3V2ZXogYXVzc2kgPGEgaHJlZj0nL3F1aXpzL3RoZW1lcy5odG1sJz5wYXJjb3VyaXIgbGUgc2l0ZSBwYXIgdGjDqG1lcyBvdSBtb3RzLWNsw6lzPC9hPi48L3A+XCIsXG4gICAgLyogUGxhbiBkdSBzaXRlLCBsaXN0ZSBkZXMgdGFncyAqLyAgIFxuICAgIHRhZ0xpc3RUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBkZXMgYXJ0aWNsZXMgZXQgcXVpenMgc3VyIGRlIG5vbWJyZXV4IHRow6htZXMgIVwiLFxuICAgIHRhZ0xpc3RNZXRhRGVzYzogXCJXaWtpTGVybmkgOiBkw6ljb3V2cmlyIGxlcyBkaWZmw6lyZW50cyB0aMOobWVzIGFib3Jkw6lzIHBhciBXaWtpTGVybmkuIElueGV4IGR1IHNpdGUuXCIsXG4gICAgdGFnTGlzdEludHJvOiBcIjxoMz5BdmVjIFdpa2lMZXJuaSwgZGV2ZW5leiBmb3J0IGVuIHRow6htZXMuLi4gT3VpIG1haXMgcXVlbHMgdGjDqG1lcyA/IDopPC9oMz48YmxvY2txdW90ZT5BcmlzdG90ZeKArzogwqvigK9M4oCZaG9tbWUgYSBuYXR1cmVsbGVtZW50IGxhIHBhc3Npb24gZGUgY29ubmHDrnRyZeKApuKAr8K7PC9ibG9ja3F1b3RlPlwiLFxuICAgIC8qIFBhZ2UgcXVpenMgKi9cbiAgICBhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQ6IFwiUmVsaXJlXCIsXG4gICAgcXVpekVsZW1lbnRMaW5rc0ludHJvOiBcIkVuIHNhdm9pciBwbHVzXCIsXG4gICAgcXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZTogXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5p4oCvP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIjxwPkxlIHByaW5jaXBlIGVzdCBzaW1wbGXigK86IDxiPnZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpPC9iPi4gUHVpcyB2b3VzIDxiPmFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZTwvYj4uIFN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgPGI+dW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXM8L2I+IGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gQ+KAmWVzdCB0b3Vqb3VycyA8Yj5sZSBjb250ZW51IGRlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pPC9iPiBjb25jZXJuYW50IGxlcyDCq+KAr2Jvbm5lc+KAr8K7IHLDqXBvbnNlcy4gQ+KAmWVzdCB1bmUgZmHDp29uIGRlIHRlc3RlciDDoCBsYSBmb2lzIHZvdHJlIGNhcGFjaXTDqSBk4oCZYXR0ZW50aW9uIGV0IHZvdHJlIG3DqW1vaXJlLiBMZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG7igJlow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPC9wPjxwPjxiPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZOKAmWF1dHJlcyBzb2x1dGlvbnMgcG91ciBhbcOpbGlvcmVyIHZvdHJlIGN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4uIFBvdXIgZW4gc2F2b2lyIHBsdXMsIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBleHBsYW5hdGlvbkVsZW1lbnRUeHQ6IFwiPHA+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBkZSA8Yj5yZWNldm9pciBwYXIgZS1tYWlsIMOgIGxhIGZyw6lxdWVuY2UgY2hvaXNpZSwgZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXM8L2I+IGV0IHBvcnRhbnQgc3VyIGRlcyBzdWpldHMgdHLDqHMgdmFyacOpcyBkZSA8Yj5jdWx0dXJlIGfDqW7DqXJhbGU8L2I+IChhcnRzLCBoaXN0b2lyZSwgbGl0dMOpcmF0dXJlLCBzY2llbmNlcywgZXRjLikuPC9wPjxwPkNlcyBhcnRpY2xlcyBzb250IGJhc8OpcyBzdXIgPGI+dW5lIG91IHBsdXNpZXVycyBwYWdlcyBkZSBXaWtpcMOpZGlhPC9iPiAoZm91cm5pZXMgZW4gbGllbiksIGRvbnQgPGI+aWxzIGV4dHJhaWVudCBjZXJ0YWluZXMgaW5mb3JtYXRpb25zPC9iPi48L3A+PHA+Q2hhcXVlIHPDqXJpZSBk4oCZYXJ0aWNsZXMgZXN0IDxiPnN1aXZpZSBk4oCZdW4gcXVpejwvYj4gcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPC9wPjxwPjxiPlZvdXMgYXBwcmVuZXogYWluc2kgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+IHRyw6hzIHNpbXBsZW1lbnQuPC9wPlwiLFxuICAgIC8qIEF1dHJlcyAqL1xuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICB0d2l0dGVyQWNjb3VudDogXCJXaWtpTGVybmlcIixcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG59OyIsIi8vIC0tIEdFU1RJT04gRFUgRk9STVVMQUlSRSBQRVJNRVRUQU5UIERFIFNBSVNJUiAvIMOJRElURVIgTEVTIElORk9TIERFUyBVVElMSVNBVEVVUlMgRVQgREUgTEVVUiBBQk9OTkVNRU5UXG5cbi8vLyBWw6lyaWZpZSBxdWUgbCd1dGlsaXNhdGV1ciBlc3QgYmllbiBjb25uZWN0w6ksIGEgbGUgYm9uIHN0YXR1dCBldCBsZSByZWRpcmlnZSB2ZXJzIGxlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbiBzaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLlxuLy8vIFNpIGMnZXN0IG9rLCBwcm9wb3NlIHVuIG1vdGV1ciBkZSByZWNoZXJjaGUgcGVybWV0dGFudCBkZSBjaGVyY2hlciB1biB1dGlsaXNhdGV1clxuLy8vIFNpIHVuIGlkIGVzdCBwYXNzw6kgcGFyIGwndXJsIG9uIGFmZmljaGUgbGVzIGluZm9ybWF0aW9ucyBkZSBsJ3V0aWxpc2F0ZXVyIGRhbnMgdW4gZm9ybXVsYWlyZSBwZXJtZXR0YW50IGRlIGwnw6lkaXRlci9zdXBwcmltZXIuXG4vLy8gU2kgcGFzIGQnaWQgcGFzc8OpIHBhciBsJ3VybCwgb24gYWZmaWNoZSB1biBmb3JtdWxhaXJlIHZpZGUgcGVybWV0dGFudCBkJ2VuIHNhaXNpciB1biBub3V2ZWwgdXRpbGlzYXRldXJcblxuLy8vIMOAIGFqb3V0ZXIgOiBcbi8vLyAtIGltcG9ydGF0aW9uIGxpc3RlIGRlIGNvbXB0ZXMgdXRpbGlzYXRldXIgw6AgY3LDqWVyXG4vLy8gLSBhdHRyaWJ1dGlvbiBkJ3VuIHBhcnJhaW4gw6AgdW4gdXRpbGlzYXRldXIgKHZpYSB1biBtb3RldXIgZGUgcmVjaGVyY2hlKS4gRMOpasOgIHByw6l2dSBwYXIgbGUgY29udHLDtGxldXIuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ1VzZXJzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vycy5qc1wiKTtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGVtcHlGb3JtLCBnZXREYXRhc0Zyb21JbnB1dHMsIHNldEF0dHJpYnV0ZXNUb0lucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBkYXRlRm9ybWF0LCBnZXRQYXNzd29yZCwgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBhZGRPa01lc3NhZ2UsIHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IGluZm9zQWRtaW5Hb2RmYXRoZXIsIGluZm9zQWRtaW5OYkdvZENoaWxkcywgaW5mb3NVc2VyRm9yQWRtaW4sIG5lZWRCZUNvbm5lY3RlZCwgc2VhcmNoVXNlcnNXaXRob3V0UmVzdWx0IH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5jb25zdCB7IGluZm9zRXhwaXJhdGVkQWRtaW4sIGluZm9zTmJEYXlzQWRtaW4sIGluZm9zUGF5bWVudHNBZG1pbiwgaXNOb3RWYWxpZGVkIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3N1YnNjcmlwdGlvblwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGRpdk1haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4tY29udGVudFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5jb25zdCBkaXZDcmFzaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3Jhc2hcIik7XG5jb25zdCBkaXZTdWJzY3JpYmVJbnRybyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaWJlSW50cm9cIik7XG5jb25zdCBkaXZQYXltZW50c0luZm9zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbmZvc1BheW1lbnRzXCIpO1xuY29uc3QgZGl2R29kY2hpbGRzSW5mb3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluZm9zR29kY2hpbGRzXCIpO1xuY29uc3QgZm9ybVVzZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInVzZXJzXCIpO1xuY29uc3QgZGVsZXRlQ2hlY2tCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGV0ZU9rTGFiZWxcIik7XG5jb25zdCB2YWxpZGF0aW9uQ2hlY2tCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInZhbGlkYXRpb25Pa0xhYmVsXCIpO1xuY29uc3QgYnRuTmV3VXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwid2FudE5ld1VzZXJcIik7XG5jb25zdCBuZXdQYXNzd29yZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmV3UGFzc3dvcmRcIik7XG5jb25zdCB0aW1lRGlmZmVyZW5jZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGltZURpZmZlcmVuY2VcIik7XG5jb25zdCBmb3JtU2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hVc2Vyc1wiKTtcbmNvbnN0IGRpdlNlYXJjaFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VhcmNoUmVzdWx0XCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihbXCJtYW5hZ2VyXCIsIFwiYWRtaW5cIl0sIFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IG5lZWRCZUNvbm5lY3RlZCwgY29sb3I6XCJlcnJvclwiIH0sIHdpbmRvdy5sb2NhdGlvbik7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICAgICAgZGl2TWFpbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGdldExvY2FseShcIm1lc3NhZ2VcIikpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIGdldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkubWVzc2FnZSwgXCJcIiwgW2dldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkuY29sb3JdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAvLyBJbml0aWFsaXNhdGlvbiBkdSBmb3JtdWxhaXJlIGRlIHJlY2hlcmNoZSA6XG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnVXNlcnMsIGZvcm1TZWFyY2gpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBGb25jdGlvbiB1dGlsZSBwb3VyIHZpZGVyIGxlIGZvcm11bGFpcmUsIHkgY29tcHJpcyBsZXMgY2hhbXBzIGhpZGRlbiwgZXRjLlxuICAgICAgICAgICAgLy8gQ2FjaGUgYXVzc2kgY2VydGFpbnMgY2hhbXBzIGVuIG1vZGUgY3LDqWF0aW9uXG4gICAgICAgICAgICBjb25zdCBlbXB0eVVzZXJGb3JtID0gKCkgPT5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbXB5Rm9ybShmb3JtVXNlcik7XG4gICAgICAgICAgICAgICAgLy8gQ2FzZSBkZSBzdXBwcmVzc2lvbiBjYWNow6llIHBhciBkw6lmYXV0LCBjYXIgaW51dGlsZSBwb3VyIGZvcm11bGFpcmUgZGUgY3LDqWF0aW9uXG4gICAgICAgICAgICAgICAgZGVsZXRlQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAvLyBDYXNlIGRlIHZhbGlkYXRpb24gY2FjaMOpZSBwYXIgZMOpZmF1dCwgY2FyIHV0aWxlIHF1ZSBkYW5zIGNlcnRhaW5zIGNhc1xuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25DaGVja0JveC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgIGRpdlN1YnNjcmliZUludHJvLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgIGRpdlBheW1lbnRzSW5mb3MuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgZGl2R29kY2hpbGRzSW5mb3MuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgLy8gQ2VydGFpbnMgbmF2aWdhdGV1cnMgb250IHRlbmRhbmNlIMOgIHJlbXBsaXIgdG91dCBzZXVsIGxlcyBjaGFtcHMgY29uZmlnVXNlcnMucGFzc3dvcmRcbiAgICAgICAgICAgICAgICBuZXdQYXNzd29yZC52YWx1ZT1cIlwiO1xuICAgICAgICAgICAgICAgIC8vIEVuIG1vZGUgY3LDqWF0aW9uLCBwYXMgZGUgY2hhbXAgcG91ciBjaGFuZ2VyIGxlIG1vdCBkZSBwYXNzZVxuICAgICAgICAgICAgICAgIG5ld1Bhc3N3b3JkLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAvLyBJbnV0aWxlIGVuIG1vZGUgY3LDqWF0aW9uXG4gICAgICAgICAgICAgICAgdGltZURpZmZlcmVuY2UucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZW1wdHlVc2VyRm9ybSgpO1xuICAgICAgICAgICAgLy8gSW5pdGlhbGlzZSBsZXMgY29udHJhaW50ZXMgZHUgZm9ybXVsYWlyZSA6XG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnVXNlcnMsIGZvcm1Vc2VyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBjb25udWVzIGNvbmNlcm5hbnQgdW4gdXRpbGlzYXRldXIgZXQgc29uIGFib25uZW1lbnRcbiAgICAgICAgICAgIGNvbnN0IHNob3dGb3JtVXNlckluZm9zID0gKGlkKSA9PlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG9uIGNvbW1lbmNlIHBhciB0b3V0IHZpZGVyLCBkZXMgZm9pcyBxdWUuLi4gOlxuICAgICAgICAgICAgICAgIGVtcHR5VXNlckZvcm0oKTtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHJHZXRJbmZvcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhockdldEluZm9zLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrY29uZmlnVXNlcnMuZ2V0VXNlckluZm9zK2lkKTtcbiAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLlVzZXIgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Bhc3N3b3JkLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZURpZmZlcmVuY2UucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEX1VTRVIgOiByZXNwb25zZS5Vc2VyLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRFX0NSRUEgOiBkYXRlRm9ybWF0KHJlc3BvbnNlLlVzZXIuY3JlYXRlZEF0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURV9VUERBVEUgOiBkYXRlRm9ybWF0KHJlc3BvbnNlLlVzZXIudXBkYXRlZEF0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURV9DT05ORUNUSU9OIDogZGF0ZUZvcm1hdChyZXNwb25zZS5Vc2VyLmNvbm5lY3RlZEF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN1YnNjcmliZUludHJvPXJlcGxhY2VBbGwoaW5mb3NVc2VyRm9yQWRtaW4sIG1hcFRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgZGF0YSBpbiByZXNwb25zZS5Vc2VyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVVzZXIuZWxlbWVudHNbZGF0YV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlVzZXJbZGF0YV0hPT10cnVlICYmIHJlc3BvbnNlLlVzZXJbZGF0YV0hPT1mYWxzZSkvLyBib29sw6llbiA9IGNhc2Ugw6AgY29jaGVyICFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtVXNlci5lbGVtZW50c1tkYXRhXS52YWx1ZT1yZXNwb25zZS5Vc2VyW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuVXNlcltkYXRhXT09dHJ1ZSkgLy8gc2kgZmFsc2UsIG9uIG5lIGZhaXQgcmllblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Vc2VyLmVsZW1lbnRzW1wiXCIrZGF0YV0uY2hlY2tlZD1cImNoZWNrZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5TdWJzY3JpcHRpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtVXNlci5lbGVtZW50c1tcIm51bWJlck9mRGF5c1wiXS52YWx1ZT1yZXNwb25zZS5TdWJzY3JpcHRpb25bXCJudW1iZXJPZkRheXNcIl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGpvdXJzIGRlIHLDqWNlcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5yZWNlaXB0RGF5cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Vc2VyLmVsZW1lbnRzW1wiZFwiK3Jlc3BvbnNlLlN1YnNjcmlwdGlvbi5yZWNlaXB0RGF5c1tpXV0uY2hlY2tlZD1cImNoZWNrZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmVnaW5TdWJUUz1uZXcgRGF0ZShyZXNwb25zZS5TdWJzY3JpcHRpb24uY3JlYXRlZEF0KS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5udW1iZXJPZkRheXMgIT09IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5iRGF5c09rPXJlc3BvbnNlLlN1YnNjcmlwdGlvbi5udW1iZXJPZkRheXMtTWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1iZWdpblN1YlRTKS8xMDAwLzM2MDAvMjQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmJEYXlzT2sgPiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZUludHJvKz1cIjxicj5cIitpbmZvc05iRGF5c0FkbWluLnJlcGxhY2UoXCJOQl9EQVlTXCIsIG5iRGF5c09rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVJbnRybys9XCI8YnI+ZGRcIitpbmZvc0V4cGlyYXRlZEFkbWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U3Vic2NyaWJlSW50cm8sIFwicFwiLCBzdWJzY3JpYmVJbnRybywgXCJcIiwgW1wiaW5mb1wiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlN1YnNjcmliZUludHJvLCBcInBcIiwgaXNOb3RWYWxpZGVkLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25DaGVja0JveC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5mb3MgZGUgcGFpZW1lbnRzIHZpYSBBUEkgV1BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJHZXRQYXltZW50c0luZm9zID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0UGF5bWVudHNJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWdVc2Vycy5nZXRQYXltZW50cytyZXNwb25zZS5Vc2VyLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRQYXltZW50c0luZm9zLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlUGF5PUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2VQYXkubGVuZ3RoIT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0eHRQYXltZW50cz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2VQYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcFRleHQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfUEFZTUVOVCA6IGRhdGVGb3JtYXQocmVzcG9uc2VQYXlbaV0uY3JlYXRlZEF0LCBcImZyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFNT1VOVCA6IHJlc3BvbnNlUGF5W2ldLmFtb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTElFTlRfTkFNRSA6IHJlc3BvbnNlUGF5W2ldLmNsaWVudE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRQYXltZW50cys9XCI8bGk+XCIrcmVwbGFjZUFsbChpbmZvc05iRGF5c0FkbWluLCBtYXBUZXh0KStcIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZQYXltZW50c0luZm9zLCBcInVsXCIsIHR4dFBheW1lbnRzLCBcIlwiLCBbXCJpbmZvXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlBheW1lbnRzSW5mb3Muc3R5bGUuZGlzcGxheT1cImJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0UGF5bWVudHNJbmZvcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRQYXltZW50c0luZm9zLnNlbmQoKTsgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuIHBhcnJhaW4gb3UgZGV1eCBwYXIgZGV1eCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzcG9uc2UuVXNlci5Hb2RmYXRoZXJJZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJHZXRHb2RGYXRoZXJJbmZvcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RGYXRoZXJJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLmdldFVzZXJJbmZvcytyZXNwb25zZS5Vc2VyLkdvZGZhdGhlcklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kRmF0aGVySW5mb3Mub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlR0Y9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2VHRi5Vc2VyICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2R29kY2hpbGRzSW5mb3MsIFwicFwiLCBpbmZvc0FkbWluR29kZmF0aGVyK1wiPGEgaHJlZj0nL1wiK2NvbmZpZ1RlbXBsYXRlLnVzZXJzTWFuYWdlbWVudFBhZ2UrXCI/aWQ9XCIrcmVzcG9uc2VHRi5Vc2VyLmlkK1wiJz5cIityZXNwb25zZUdGLlVzZXIubmFtZStcIjwvYT5cIitcIi48YnI+XCIsIFwiXCIsIFtcImluZm9cIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2R29kY2hpbGRzSW5mb3Muc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZEZhdGhlckluZm9zLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kRmF0aGVySW5mb3Muc2VuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlcyBmaWxsZXVscyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR4dEdvZGNoaWxkcz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhockdldEdvZGNoaWxkcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZGNoaWxkcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLmdldEdvZENoaWxkcytpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlR1M9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZUdTLmxlbmd0aCE9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRHb2RjaGlsZHMrPWluZm9zQWRtaW5Hb2RmYXRoZXIucmVwbGFjZShcIiNOQlwiLCByZXNwb25zZUdTLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZUdTKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0R29kY2hpbGRzKz1cIjxhIGhyZWY9Jy9cIitjb25maWdUZW1wbGF0ZS51c2Vyc01hbmFnZW1lbnRQYWdlK1wiP2lkPVwiK3Jlc3BvbnNlR1NbaV0uaWQrXCInPlwiK3Jlc3BvbnNlR1NbaV0ubmFtZStcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZHb2RjaGlsZHNJbmZvcywgXCJwXCIsIHR4dEdvZGNoaWxkcytcIi5cIiwgXCJcIiwgW1wiaW5mb1wiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZHb2RjaGlsZHNJbmZvcy5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMuc2VuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNlbmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2kgdW4gaWQgZXN0IHBhc3PDqSBwYXIgbCd1cmwsIG9uIGVzc2F5ZSBkJ2FmZmljaGVyIGwndXRpbGlzYXRldXIgOlxuICAgICAgICAgICAgbGV0IHVybERhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgaWYodXJsRGF0YXMgJiYgdXJsRGF0YXMuaWQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgc2hvd0Zvcm1Vc2VySW5mb3ModXJsRGF0YXMuaWQpO1xuXG4gICAgICAgICAgICAvLyBCZXNvaW4gZCd1biBjb3VwIGRlIEvDpHJjaGVyID8gXG4gICAgICAgICAgICBidG5OZXdVc2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVtcHR5VXNlckZvcm0oKTtcbiAgICAgICAgICAgIH0pOyAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBFbnZvaSBkdSBmb3JtdWxhaXJlIGRlcyBpbmZvcyBkZSBsJ3V0aWxpc2F0ZXVyXG4gICAgICAgICAgICBmb3JtVXNlci5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybVVzZXIpO1xuICAgICAgICAgICAgICAgIC8vIHJlY29tcG9zaXRpb24gZGVzIGpvdXJzIHZhbGFibGVzIHBvdXIgbCdhYm9ubmVtZW50IDpcbiAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cz1cIlwiO1xuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0xOyBpPD03OyBpKyspXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhc1tcImRcIitpXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzLnJlY2VpcHREYXlzKz1cIlwiK2k7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHhoclVzZXJEYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSAmJiAoZGF0YXMuZGVsZXRlT2shPT11bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMub3BlbihcIkRFTEVURVwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytcIi9cIitkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKGRhdGFzLnZhbGlkYXRpb25PayE9PXVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy52YWxpZGF0ZVVzZXJSb3V0ZStkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZighaXNFbXB0eShkYXRhcy5pZCkpXG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLnVwZGF0ZVVzZXJJbmZvcytkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXMucGFzc3dvcmQ9Z2V0UGFzc3dvcmQoY29uZmlnVXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLCBjb25maWdVc2Vycy5wYXNzd29yZC5taW5sZW5ndGgrMik7Ly8gbW90IGRlIHBhc3NlIHRlbXBvcmFpcmVcbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLmNyZWF0ZVVzZXJSb3V0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAxICYmIHJlc3BvbnNlLmlkIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGFkZE9rTWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMuaWQ9cmVzcG9uc2UuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLm1lc3NhZ2UhPXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzRW1wdHkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhcy5kZWxldGVPaz09PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1Vc2VySW5mb3MoZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlVc2VyRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gVHJhaXRlbWVudCBkdSBsYW5jZW1lbnQgZCd1bmUgcmVjaGVyY2hlXG4gICAgICAgICAgICBmb3JtU2VhcmNoLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHJTZWFyY2ggPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHJTZWFyY2gub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrY29uZmlnVXNlcnMuc2VhcmNoVXNlclJvdXRlKTtcbiAgICAgICAgICAgICAgICB4aHJTZWFyY2gub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5sZW5ndGg9PT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJwXCIsIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCwgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdEhUTUw9XCI8b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RIVE1MKz1cIjxvcHRpb24gdmFsdWU9J1wiK3Jlc3BvbnNlW2ldLmlkK1wiJz5cIityZXNwb25zZVtpXS5uYW1lK1wiIChcIityZXNwb25zZVtpXS5lbWFpbCtcIik8L29wdGlvbj5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwic2VsZWN0XCIsIHNlbGVjdEhUTUwsIFwic2VsZWN0U2VhcmNoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hTZWxlY3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RTZWFyY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2VhcmNoU2VsZWN0LnZhbHVlIT09XCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVVzZXJJbmZvcyhzZWFyY2hTZWxlY3QudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZDcmFzaCwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgPSAoaW5wdXRzQ29uZiwgbXlGb3JtKSA9Plxue1xuICAgIGZvcihsZXQgaSBpbiBteUZvcm0uZWxlbWVudHMpXG4gICAge1xuICAgICAgICBpZighaXNFbXB0eShteUZvcm0uZWxlbWVudHNbaV0uaWQpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgaWRJbnB1dD1teUZvcm0uZWxlbWVudHNbaV0uaWQ7XG4gICAgICAgICAgICBpZihpbnB1dHNDb25mW2lkSW5wdXRdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dEhUTUw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRJbnB1dCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIGluIGlucHV0c0NvbmZbaWRJbnB1dF0pXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SFRNTC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbnB1dHNDb25mW2lkSW5wdXRdW2F0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBSw6ljdXDDqHJlIHRvdXRlcyBsZXMgdmFsZXVycyBkZSBjaGFtcHMgZW4gb21ldHRhbnQgbGVzIGNoZWNrYm94IG5vbiBjb2Now6llcywgZXRjLlxuZXhwb3J0IGNvbnN0IGdldERhdGFzRnJvbUlucHV0cyA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZGF0YXM9e307XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAgICAgZGF0YXNbZW50cmllWzBdXT1lbnRyaWVbMV07XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBWaWRlIHRvdXMgbGVzIGNoYW1wcyBkJ3VuIGZvcm11bGFpcmUsIHkgY29tcHJpcyBoaWRkZW4sIGNoZWNrYm94LCBldGMuXG4vLyBSZXZvaXIgcG91ciBsZXMgc2VsZWN0XG5leHBvcnQgY29uc3QgZW1weUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgIHtcbiAgICAgICAgaWYobXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJjaGVja2JveFwiIHx8IG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwicmFkaW9cIilcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLmNoZWNrZWQ9ZmFsc2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnZhbHVlPVwiXCI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8gVmlkZSBldCBjYWNoZSBsZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgZW1weUFuZEhpZGVGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBlbXB5Rm9ybShteUZvcm0pO1xuICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/newLoginValidation.app.js b/front/public/JS/newLoginValidation.app.js index 59017b2..861c982 100644 --- a/front/public/JS/newLoginValidation.app.js +++ b/front/public/JS/newLoginValidation.app.js @@ -954,24 +954,22 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/everywhere.js */ "./src/tools/everywhere.js"); /* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- PAGE PERMETTANT DE VALIDER UN CHANGEMENT D'EMAIL OU DE MOT DE PASSE /// Un token est transmis en paramètre de l'Url. Il a une validité limité dans le temps. /// Si le token est ok, on valide la mise à jour et redirige l'utilisateur vers sa page d'accueil // Fichier de configuration côté client : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var _require = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"), - accountPage = _require.accountPage, - userHomePage = _require.userHomePage; +const { + accountPage, + userHomePage +} = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.js"), - checkNewLoginLinkRoute = _require2.checkNewLoginLinkRoute, - userRoutes = _require2.userRoutes; // Importation des fonctions utile au script : +const { + checkNewLoginLinkRoute, + userRoutes +} = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // Importation des fonctions utile au script : @@ -980,69 +978,53 @@ var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.j // Dictionnaires : -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require3.serverError; +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require4 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - badLinkValidationMessage = _require4.badLinkValidationMessage; +const { + badLinkValidationMessage +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); -var divResponse = document.getElementById("response"); +const divResponse = document.getElementById("response"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var datas, xhr; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - try { - datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_4__["getUrlParams"])(); +const initialise = async () => { + try { + const datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_4__["getUrlParams"])(); - if (datas && datas.t !== undefined) { - xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + checkNewLoginLinkRoute + datas.t); + if (datas && datas.t !== undefined) { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + checkNewLoginLinkRoute + datas.t); - xhr.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + xhr.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - if (this.status === 200 && response.message != undefined) { - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["saveLocaly"])("message", { - message: response.message, - color: "success" - }); // pour l'afficher sur la page suivante + if (this.status === 200 && response.message != undefined) { + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["saveLocaly"])("message", { + message: response.message, + color: "success" + }); // pour l'afficher sur la page suivante - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); // au cas où blocage redirection + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message, "", ["success"]); // au cas où blocage redirection - window.location.assign("/" + userHomePage); // que user possible ici - } else if (this.status === 404 && response.errors != undefined) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", badLinkValidationMessage.replace("#URL", accountPage), "", ["error"]); - } - }; - - xhr.setRequestHeader("Authorization", "Bearer " + datas.t); - xhr.send(); - } - } catch (e) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - console.error(e); - } - - case 1: - case "end": - return _context.stop(); + window.location.assign("/" + userHomePage); // que user possible ici + } else if (this.status === 404 && response.errors != undefined) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", badLinkValidationMessage.replace("#URL", accountPage), "", ["error"]); } - } - }, _callee); - })); + }; - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + xhr.setRequestHeader("Authorization", "Bearer " + datas.t); + xhr.send(); + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + console.error(e); + } +}; initialise(); @@ -1062,14 +1044,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1087,32 +1068,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1136,13 +1106,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1162,14 +1132,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); // Fonction récupérant les paramètres passés par l'url -var getUrlParams = function getUrlParams() { +const getUrlParams = () => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); + const parameters = location.search.substring(1).split("&"); if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, + let param, datas = {}; - for (var i in parameters) { + for (let i in parameters) { param = parameters[i].split("="); if (param.length === 2) datas[param[0]] = decodeURI(param[1]); } @@ -1199,27 +1169,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1228,11 +1194,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1246,96 +1212,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1344,4 +1282,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9uZXdMb2dpblZhbGlkYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExhbmd1YWdlIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJkaXZSZXNwb25zZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJkYXRhcyIsImdldFVybFBhcmFtcyIsInQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwibWVzc2FnZSIsInNhdmVMb2NhbHkiLCJjb2xvciIsImFkZEVsZW1lbnQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImFzc2lnbiIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInNldFJlcXVlc3RIZWFkZXIiLCJzZW5kIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiZ2V0TG9jYWx5IiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsImhvbWVQYWdlIiwicGFyYW1ldGVycyIsInNwbGl0IiwicGFyYW0iLCJkZWNvZGVVUkkiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJuYlF1ZXN0aW9ucyIsIlF1ZXN0aW9ubmFpcmVJZCIsIkdyb3VwSWQiLCJjaGVja1Nlc3Npb24iLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwidXNlciIsIm5vdyIsIm9ubG9hZCIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyxtQ0FBRCxDQUFyQjs7QUFDQSxJQUFNQyxjQUFjLEdBQUdELG1CQUFPLENBQUMscURBQUQsQ0FBOUI7O0FBRUFFLE1BQU0sQ0FBQ0MsT0FBUDtBQUVJQyxRQUFNLEVBQUUsMkJBRlo7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MUIsQ0FBWjtBQUNBRSw2QkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNIO0FBQ0osbUJBNUNEOztBQTZDQTlFLHFCQUFHLENBQUMyRixPQUFKLEdBQWM7QUFBQSwyQkFBTVosTUFBTSxDQUFDL0UsR0FBRyxDQUFDNEYsVUFBTCxDQUFaO0FBQUEsbUJBQWQ7O0FBQ0E1RixxQkFBRyxDQUFDc0IsSUFBSjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFab0QsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU1PLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNOLGNBQUQsRUFBaUJoRSxPQUFqQixFQUEwQmlFLFNBQTFCLEVBQ3JCO0FBQ0ksTUFBRyxDQUFDMUssMkRBQU8sQ0FBQ3lHLE9BQUQsQ0FBWCxFQUNJQyxvRUFBVSxDQUFDLFNBQUQsRUFBWUQsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDekcsMkRBQU8sQ0FBQzBLLFNBQUQsQ0FBWCxFQUNJaEUsb0VBQVUsQ0FBQyxLQUFELEVBQVFnRSxTQUFSLENBQVY7QUFDSixNQUFHLENBQUMxSywyREFBTyxDQUFDeUssY0FBRCxDQUFYLEVBQ0k1RCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCMEQsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9uZXdMb2dpblZhbGlkYXRpb24uYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbmV3TG9naW5WYWxpZGF0aW9uLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBQQUdFIFBFUk1FVFRBTlQgREUgVkFMSURFUiBVTiBDSEFOR0VNRU5UIEQnRU1BSUwgT1UgREUgTU9UIERFIFBBU1NFXG5cbi8vLyBVbiB0b2tlbiBlc3QgdHJhbnNtaXMgZW4gcGFyYW3DqHRyZSBkZSBsJ1VybC4gSWwgYSB1bmUgdmFsaWRpdMOpIGxpbWl0w6kgZGFucyBsZSB0ZW1wcy5cbi8vLyBTaSBsZSB0b2tlbiBlc3Qgb2ssIG9uIHZhbGlkZSBsYSBtaXNlIMOgIGpvdXIgZXQgcmVkaXJpZ2UgbCd1dGlsaXNhdGV1ciB2ZXJzIHNhIHBhZ2UgZCdhY2N1ZWlsXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IHsgYWNjb3VudFBhZ2UsIHVzZXJIb21lUGFnZSB9ID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuY29uc3QgeyBjaGVja05ld0xvZ2luTGlua1JvdXRlLCB1c2VyUm91dGVzIH0gPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL3VzZXJzXCIpO1xuXG4vLyBJbXBvcnRhdGlvbiBkZXMgZm9uY3Rpb25zIHV0aWxlIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICBpZihkYXRhcyAmJiBkYXRhcy50IT09dW5kZWZpbmVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTmV3TG9naW5MaW5rUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSwgY29sb3I6XCJzdWNjZXNzXCIgfSk7Ly8gcG91ciBsJ2FmZmljaGVyIHN1ciBsYSBwYWdlIHN1aXZhbnRlXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7Ly8gYXUgY2FzIG/DucKgYmxvY2FnZSByZWRpcmVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIit1c2VySG9tZVBhZ2UpOy8vIHF1ZSB1c2VyIHBvc3NpYmxlIGljaVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSA0MDQgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBhY2NvdW50UGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrZGF0YXMudCk7XG4gICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIHLDqWN1cMOpcmFudCBsZXMgcGFyYW3DqHRyZXMgcGFzc8OpcyBwYXIgbCd1cmxcbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9Plxue1xuICAgIGlmKGlzRW1wdHkobG9jYXRpb24uc2VhcmNoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoXCImXCIpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpIHx8IHBhcmFtZXRlcnMubGVuZ3RoPT09MClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBcbiAgICBsZXQgcGFyYW0sIGRhdGFzPXt9O1xuICAgIGZvcihsZXQgaSBpbiBwYXJhbWV0ZXJzKVxuICAgIHtcbiAgICAgICAgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYocGFyYW0ubGVuZ3RoPT09MilcbiAgICAgICAgICAgIGRhdGFzW3BhcmFtWzBdXT1kZWNvZGVVUkkocGFyYW1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6IG91IGQndW4gZ3JvdXBlIGRlIHF1aXpzXG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICghaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSB8fCAhaXNFbXB0eShhbnN3ZXIuR3JvdXBJZCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkpXG4gICAgICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGF0YXMuR3JvdXBJZD1hbnN3ZXIuR3JvdXBJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9uZXdMb2dpblZhbGlkYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxyZWFkeUNvbm5lY3RlZCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImJhZFBhc3N3b3JkIiwiYnllYnllTWVzc2FnZSIsImNvbm5lY3Rpb25PayIsImNyZWF0aW9uT2tNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImZhaWxCb3RUZXN0IiwiZmFpbEJvdFRlc3RMb2ciLCJmb3Jtc0VtYWlsTGFiZWwiLCJmb3Jtc0VtYWlsUGxhY2Vob2xkZXIiLCJmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyIiwiZm9ybXNDR1VPa0xhYmVsIiwiZm9ybXNTdWJtaXRUeHQiLCJnb2RmYXRoZXJGb3VuZCIsImdvZGZhdGhlck5vdEZvdW5kIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NVc2VyTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJOb0dvZGNoaWxkcyIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lU3ViamVjdCIsIm5lZWRCZUNvbm5lY3RlZCIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRFbWFpbCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZExhbmd1YWdlIiwibmVlZExvbmdQYXNzV29yZCIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRTdGF0dXMiLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJwYXNzd29yZENvcGllZCIsInNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdCIsInRvb01hbnlMb2dpbkZhaWxzIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE9rTWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwid2VsY29tZU1lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJkaXZSZXNwb25zZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJkYXRhcyIsImdldFVybFBhcmFtcyIsInQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwibWVzc2FnZSIsInNhdmVMb2NhbHkiLCJjb2xvciIsImFkZEVsZW1lbnQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImFzc2lnbiIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInNldFJlcXVlc3RIZWFkZXIiLCJzZW5kIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiZ2V0TG9jYWx5IiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsImhvbWVQYWdlIiwicGFyYW1ldGVycyIsInNwbGl0IiwicGFyYW0iLCJkZWNvZGVVUkkiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJuYlF1ZXN0aW9ucyIsIlF1ZXN0aW9ubmFpcmVJZCIsIkdyb3VwSWQiLCJjaGVja1Nlc3Npb24iLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwidXNlciIsIm5vdyIsIm9ubG9hZCIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Il0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyxtQ0FBRCxDQUFyQjs7QUFDQSxJQUFNQyxjQUFjLEdBQUdELG1CQUFPLENBQUMscURBQUQsQ0FBOUI7O0FBRUFFLE1BQU0sQ0FBQ0MsT0FBUDtBQUVJQyxRQUFNLEVBQUUsMkJBRlo7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Q0F6RU0sQyxDQTBFUDs7QUFDQSxNQUFNMkQsWUFBWSxHQUFHLENBQUNOLGNBQUQsRUFBaUJoRSxPQUFqQixFQUEwQmlFLFNBQTFCLEtBQ3JCO0FBQ0ksTUFBRyxDQUFDMUssMkRBQU8sQ0FBQ3lHLE9BQUQsQ0FBWCxFQUNJQyxvRUFBVSxDQUFDLFNBQUQsRUFBWUQsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDekcsMkRBQU8sQ0FBQzBLLFNBQUQsQ0FBWCxFQUNJaEUsb0VBQVUsQ0FBQyxLQUFELEVBQVFnRSxTQUFSLENBQVY7QUFDSixNQUFHLENBQUMxSywyREFBTyxDQUFDeUssY0FBRCxDQUFYLEVBQ0k1RCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCMEQsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9uZXdMb2dpblZhbGlkYXRpb24uYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbmV3TG9naW5WYWxpZGF0aW9uLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6kgYXUgc2l0ZSAhXCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiQXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG5lIGNvcnJlc3BvbmQgYXV4IGluZm9ybWF0aW9ucyBzYWlzaWVzLlwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLCBcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGZhaWxCb3RUZXN0OiBcIlVuIHByb2Jsw6htZSBhIMOpdMOpIHJlbmNvbnRyw6kgZHVyYW50IHZvdHJlIGluc2NyaXB0aW9uLiBFbiBjYXMgZGUgZGlmZmljdWx0w6ksIG4naMOpc2l0ZXogcGFzIGNvbnRhY3RlciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgZmFpbEJvdFRlc3RMb2c6IFwiVW5lIGluc2NyaXB0aW9uIGEgw6l0w6kgYmxvcXXDqWUsIHBhcmNlIHF1ZSBsZSBjaGFtcCBlbWFpbDIgw6l0YWl0IHJlbnNlaWduw6kgYXZlYyA6IFwiLFxuICAgIGZvcm1zRW1haWxMYWJlbDogXCJFLW1haWwgOlwiLFxuICAgIGZvcm1zRW1haWxQbGFjZWhvbGRlcjogXCJWb3RyZSBhZHJlc3NlIGUtbWFpbFwiLFxuICAgIGZvcm1zRW1haWwyUGxhY2Vob2xkZXI6IFwiU2kgdm91cyB2b3lleiBjZSBjaGFtcCwgbGFpc3Nlei1sZSB2aWRlXCIsLy9jaGFtcCBxdWkgbmUgZGV2cmFpdCBwYXMgw6p0cmUgdmlzaWJsZSBwYXIgZGVzIGh1bWFpbnNcbiAgICBmb3Jtc0NHVU9rTGFiZWw6IFwiSidhY2NlcHRlIDxhIGhyZWY9I2xpbmsgdGFyZ2V0PVxcXCJfYmxhbmtcXFwiIHJlbD1cXFwibm9vcGVuZXJcXFwiIHRpdGxlPVxcXCLDgCBsaXJlIDopXFxcIj5sZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlIGQnVXRpbGlzYXRpb248L2E+IGR1IHNpdGUgKHJlcXVpcykuXCIsXG4gICAgZm9ybXNTdWJtaXRUeHQ6IFwiSmUgbSdhYm9ubmUgIVwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIFxcXCJwYXJyYWluXFxcIiBhIGJpZW4gw6l0w6kgdHJvdXbDqS4gQ2V0dGUgcGVyc29ubmUgc2VyYSBhdmVydGllIHF1ZSB2b3VzIGwnYXZleiBkw6lzaWduw6llLlwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkTDqXNvbMOpIG1haXMgYXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIC8gZS1tYWlsIGRlIHBhcnJhaW5hZ2UgOihcIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1bHMgOiBcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zVXNlck5iR29kQ2hpbGRzOiBcIlZvaWNpIGxlcyAjTkIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBlbiB2b3VzIGTDqXNpZ25hbnQgY29tbWUgXFxcInBhcnJhaW5cXFwiIDogXCIsXG4gICAgaW5mb3NVc2VyTm9Hb2RjaGlsZHM6IFwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgYSBleHBpcsOpLlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgKlRJTUlORyogIVwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48YnI+U2kgZGFucyBsJ2F2ZW5pciBjZXR0ZSBwZXJzb25uZSBzb3VzY3JpdCB1biBhYm9ubmVtZW50IHByw6ltaXVtLCB2b3RyZSBwcm9wcmUgYWJvbm5lbWVudCBzZXJhIHByb2xvbmfDqSBkZSAzMCBqb3Vycy48L3A+PHA+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMsIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcblNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZS1tYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi48YnI+RW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgZXQgY29tcGzDqXRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNCBIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZCfDqnRyZSBlbnZvecOpIMOgIHZvdHJlIGFkcmVzc2UgZS1tYWlsICgjRU1BSUwpLlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgPGI+cG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+PC9iPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+w4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGRlIE5PTV9TSVRFIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlIGNvbnRlbnUgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuw4AgYmllbnTDtHQgc3VyIE5PTV9TSVRFLlwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIHVuIHNlcnZldXIgU01UUCB2YWxpZGUuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkVUdDT2sgOiBcIk1lcmNpIGQnYWNjZXB0ZXIgbGVzIENHVSBwb3VyIGNyw6llciB2b3RyZSBjb21wdGUuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBjb21wdGUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgcG91dm9pciB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbm91dmVhdSBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIgZGUgdm90cmUgb3JkaW5hdGV1ciAob3UgbW9iaWxlKS4gVm91cyBwb3V2ZXogbGUgXFxcImNvbGxlclxcXCIgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIHNlYXJjaFVzZXJzV2l0aG91dFJlc3VsdDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiRMOpc29sw6kgbWFpcyBpbCB5IGEgZXUgdHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXRleiBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS4gVm91cyBwb3V2ZXogdm91cyB5IGNvbm5lY3RlciA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogY29tcGzDqXRlciBsZXMgaW5mb3JtYXRpb25zIGRlIHZvdHJlIGFib25uZW1lbnQgY2ktZGVzc291cy5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyAtLSBQQUdFIFBFUk1FVFRBTlQgREUgVkFMSURFUiBVTiBDSEFOR0VNRU5UIEQnRU1BSUwgT1UgREUgTU9UIERFIFBBU1NFXG5cbi8vLyBVbiB0b2tlbiBlc3QgdHJhbnNtaXMgZW4gcGFyYW3DqHRyZSBkZSBsJ1VybC4gSWwgYSB1bmUgdmFsaWRpdMOpIGxpbWl0w6kgZGFucyBsZSB0ZW1wcy5cbi8vLyBTaSBsZSB0b2tlbiBlc3Qgb2ssIG9uIHZhbGlkZSBsYSBtaXNlIMOgIGpvdXIgZXQgcmVkaXJpZ2UgbCd1dGlsaXNhdGV1ciB2ZXJzIHNhIHBhZ2UgZCdhY2N1ZWlsXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IHsgYWNjb3VudFBhZ2UsIHVzZXJIb21lUGFnZSB9ID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuY29uc3QgeyBjaGVja05ld0xvZ2luTGlua1JvdXRlLCB1c2VyUm91dGVzIH0gPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL3VzZXJzXCIpO1xuXG4vLyBJbXBvcnRhdGlvbiBkZXMgZm9uY3Rpb25zIHV0aWxlIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICBpZihkYXRhcyAmJiBkYXRhcy50IT09dW5kZWZpbmVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTmV3TG9naW5MaW5rUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSwgY29sb3I6XCJzdWNjZXNzXCIgfSk7Ly8gcG91ciBsJ2FmZmljaGVyIHN1ciBsYSBwYWdlIHN1aXZhbnRlXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7Ly8gYXUgY2FzIG/DucKgYmxvY2FnZSByZWRpcmVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIit1c2VySG9tZVBhZ2UpOy8vIHF1ZSB1c2VyIHBvc3NpYmxlIGljaVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSA0MDQgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBhY2NvdW50UGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrZGF0YXMudCk7XG4gICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIHLDqWN1cMOpcmFudCBsZXMgcGFyYW3DqHRyZXMgcGFzc8OpcyBwYXIgbCd1cmxcbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9Plxue1xuICAgIGlmKGlzRW1wdHkobG9jYXRpb24uc2VhcmNoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoXCImXCIpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpIHx8IHBhcmFtZXRlcnMubGVuZ3RoPT09MClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBcbiAgICBsZXQgcGFyYW0sIGRhdGFzPXt9O1xuICAgIGZvcihsZXQgaSBpbiBwYXJhbWV0ZXJzKVxuICAgIHtcbiAgICAgICAgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYocGFyYW0ubGVuZ3RoPT09MilcbiAgICAgICAgICAgIGRhdGFzW3BhcmFtWzBdXT1kZWNvZGVVUkkocGFyYW1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6IG91IGQndW4gZ3JvdXBlIGRlIHF1aXpzXG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICghaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSB8fCAhaXNFbXB0eShhbnN3ZXIuR3JvdXBJZCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkpXG4gICAgICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGF0YXMuR3JvdXBJZD1hbnN3ZXIuR3JvdXBJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/paymentPage.app.js b/front/public/JS/paymentPage.app.js index 96e93c2..a1a77a7 100644 --- a/front/public/JS/paymentPage.app.js +++ b/front/public/JS/paymentPage.app.js @@ -759,18 +759,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/matomo.js */ "./src/tools/matomo.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); /* harmony import */ var _tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/webportage.js */ "./src/tools/webportage.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DE LA PAGE DU FINANCEMENT PARTICIPATIF (SANS DEVOIR ÊTRE CONNECTÉ) /// Permet d'afficher les boutons de paiement WP suivant le choix de l'utilisateur. /// Matomo est également activé si l'internaute n'est pas connecté. // Fichier de configuration tirés du backend : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions utiles au script : +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // Fonctions utiles au script : @@ -780,75 +776,49 @@ var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, CGV, abo1, abo2, abo3, abo4, divWPBtns; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["checkSession"])(); +const initialise = async () => { + try { + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["checkSession"])(); - case 3: - isConnected = _context.sent; - - if (isConnected) { - // on change le lien du compte en haut : - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["updateAccountLink"])(user.status, configTemplate); - } else Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_3__["loadMatomo"])(); // Les boutons de paiement WP : + if (isConnected) { + // on change le lien du compte en haut : + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["updateAccountLink"])(user.status, configTemplate); + } else Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_3__["loadMatomo"])(); // Les boutons de paiement WP : - CGV = document.getElementById("CGVOk"); - abo1 = document.getElementById("abo1"); - abo2 = document.getElementById("abo2"); - abo3 = document.getElementById("abo3"); - abo4 = document.getElementById("abo4"); - divWPBtns = document.getElementById("WPBtns"); - divWPBtns.style.display = "none"; - abo1.addEventListener("change", function (e) { - Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["unCheckAllOthers"])("abo1"); - }); - abo2.addEventListener("change", function (e) { - Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["unCheckAllOthers"])("abo2"); - }); - abo3.addEventListener("change", function (e) { - Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["unCheckAllOthers"])("abo3"); - }); - abo4.addEventListener("change", function (e) { - Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["unCheckAllOthers"])("abo4"); - }); - CGV.addEventListener("change", function (e) { - if (CGV.checked === true) { - divWPBtns.style.display = "block"; - if (abo1.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["showBtnPayment"])("btn1");else if (abo2.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["showBtnPayment"])("btn2");else if (abo3.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["showBtnPayment"])("btn3");else if (abo4.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["showBtnPayment"])("btn4");else { - divWPBtns.style.display = "none"; - CGV.checked = false; - } - } else divWPBtns.style.display = "none"; - }); - _context.next = 22; - break; - - case 19: - _context.prev = 19; - _context.t0 = _context["catch"](0); - console.error(_context.t0); - - case 22: - case "end": - return _context.stop(); + const CGV = document.getElementById("CGVOk"); + const abo1 = document.getElementById("abo1"); + const abo2 = document.getElementById("abo2"); + const abo3 = document.getElementById("abo3"); + const abo4 = document.getElementById("abo4"); + const divWPBtns = document.getElementById("WPBtns"); + divWPBtns.style.display = "none"; + abo1.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["unCheckAllOthers"])("abo1"); + }); + abo2.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["unCheckAllOthers"])("abo2"); + }); + abo3.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["unCheckAllOthers"])("abo3"); + }); + abo4.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["unCheckAllOthers"])("abo4"); + }); + CGV.addEventListener("change", function (e) { + if (CGV.checked === true) { + divWPBtns.style.display = "block"; + if (abo1.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["showBtnPayment"])("btn1");else if (abo2.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["showBtnPayment"])("btn2");else if (abo3.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["showBtnPayment"])("btn3");else if (abo4.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_5__["showBtnPayment"])("btn4");else { + divWPBtns.style.display = "none"; + CGV.checked = false; } - } - }, _callee, null, [[0, 19]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + } else divWPBtns.style.display = "none"; + }); + } catch (e) { + console.error(e); + } +}; initialise(); @@ -868,14 +838,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -893,13 +862,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -919,7 +888,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__); // Fonction chargeant le code matomo -var loadMatomo = function loadMatomo() { +const loadMatomo = () => { // chargement de matomo var _paq = window._paq = window._paq || []; //ajout cnil : @@ -985,27 +954,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1014,11 +979,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1032,96 +997,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1140,30 +1077,30 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unCheckAllOthers", function() { return unCheckAllOthers; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showBtnPayment", function() { return showBtnPayment; }); -var checkBoxes = { +const checkBoxes = { "CGV": document.getElementById("CGVOk"), "abo1": document.getElementById("abo1"), "abo2": document.getElementById("abo2"), "abo3": document.getElementById("abo3"), "abo4": document.getElementById("abo4") }; -var divWPBtns = document.getElementById("WPBtns"); // Lorsque l'on sélectionne un montant, les autres options + les CGV sont désélectionnés +const divWPBtns = document.getElementById("WPBtns"); // Lorsque l'on sélectionne un montant, les autres options + les CGV sont désélectionnés -var unCheckAllOthers = function unCheckAllOthers(choice) { - for (var id in checkBoxes) { +const unCheckAllOthers = choice => { + for (let id in checkBoxes) { if (id !== choice) checkBoxes[id].checked = false; divWPBtns.style.display = "none"; } }; -var btns = { +const btns = { "btn1": document.getElementById("WPBtn1"), "btn2": document.getElementById("WPBtn2"), "btn3": document.getElementById("WPBtn3"), "btn4": document.getElementById("WPBtn4") }; // Affiche le bon bouton de paiement et cache les autres -var showBtnPayment = function showBtnPayment(choice) { - for (var id in btns) { +const showBtnPayment = choice => { + for (let id in btns) { if (id !== choice) btns[id].style.display = "none";else btns[id].style.display = "block"; } }; @@ -1171,4 +1108,4 @@ var showBtnPayment = function showBtnPayment(choice) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGF5bWVudFBhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3dlYnBvcnRhZ2UuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJjb25maWdUZW1wbGF0ZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImNoZWNrU2Vzc2lvbiIsImlzQ29ubmVjdGVkIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwibG9hZE1hdG9tbyIsIkNHViIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJhYm8xIiwiYWJvMiIsImFibzMiLCJhYm80IiwiZGl2V1BCdG5zIiwic3R5bGUiLCJkaXNwbGF5IiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJ1bkNoZWNrQWxsT3RoZXJzIiwiY2hlY2tlZCIsInNob3dCdG5QYXltZW50IiwiY29uc29sZSIsImVycm9yIiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsImpzb24iLCJwYXJzZSIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwiX3BhcSIsIndpbmRvdyIsInB1c2giLCJzZWxmIiwiZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCIsIm5vdyIsIm5vd1RzIiwicm91bmQiLCJnZXRUaW1lIiwidmlzaXRvckluZm8iLCJnZXRWaXNpdG9ySW5mbyIsImNyZWF0ZVRzIiwicGFyc2VJbnQiLCJjb29raWVUaW1lb3V0Iiwib3JpZ2luYWxUaW1lb3V0Iiwic2V0VmlzaXRvckNvb2tpZVRpbWVvdXQiLCJ1IiwiZCIsImciLCJjcmVhdGVFbGVtZW50IiwicyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidHlwZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwidG9rZW4iLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJkYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwibmJRdWVzdGlvbnMiLCJRdWVzdGlvbm5haXJlSWQiLCJHcm91cElkIiwidXJsUmVkaXJlY3Rpb24iLCJtZXNzYWdlIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbmxvYWQiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwibG9jYXRpb24iLCJpbmRleE9mIiwiYXNzaWduIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJzZW5kIiwiY2hlY2tCb3hlcyIsImNob2ljZSIsImJ0bnMiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlD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LFVBQVUsQ0FBQ2hLLEVBQUQsQ0FBVixDQUFleUUsT0FBZixHQUF1QixLQUF2QjtBQUNKTixhQUFTLENBQUNDLEtBQVYsQ0FBZ0JDLE9BQWhCLEdBQXdCLE1BQXhCO0FBQ0g7QUFDSixDQVJNO0FBV1AsSUFBTTZGLElBQUksR0FDVjtBQUNJLFVBQVNyRyxRQUFRLENBQUNDLGNBQVQsQ0FBd0IsUUFBeEIsQ0FEYjtBQUVJLFVBQVNELFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixRQUF4QixDQUZiO0FBR0ksVUFBU0QsUUFBUSxDQUFDQyxjQUFULENBQXdCLFFBQXhCLENBSGI7QUFJSSxVQUFTRCxRQUFRLENBQUNDLGNBQVQsQ0FBd0IsUUFBeEI7QUFKYixDQURBLEMsQ0FRQTs7QUFDTyxJQUFNWSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLENBQUN1RixNQUFELEVBQzlCO0FBQ0ksT0FBSyxJQUFJakssRUFBVCxJQUFla0ssSUFBZixFQUNBO0FBQ0ksUUFBR2xLLEVBQUUsS0FBR2lLLE1BQVIsRUFDSUMsSUFBSSxDQUFDbEssRUFBRCxDQUFKLENBQVNvRSxLQUFULENBQWVDLE9BQWYsR0FBdUIsTUFBdkIsQ0FESixLQUdJNkYsSUFBSSxDQUFDbEssRUFBRCxDQUFKLENBQVNvRSxLQUFULENBQWVDLE9BQWYsR0FBdUIsT0FBdkI7QUFDUDtBQUNKLENBVE0sQyIsImZpbGUiOiIuL0pTL3BheW1lbnRQYWdlLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL3BheW1lbnRQYWdlLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIi8vIFNpIG5vbiB1dGlsaXPDqSwgc3VwcHJpbWVyIGwnYXBwZWwgZGVzIEpTIGZyb250LWVuZCBwdWlzIHJlY29tcGlsZXIuXG4vLyBSZXZvaXIgY29tbWVudCByw6lvcmdhbmlzZXIgY2VsYSBzb3VzLWZvcm1lIGRlIG1vZHVsZSBpbmTDqXBlbmRhbnQuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gU3RhdHMgTWF0b21vIDpcbiAgICBtYXRvbW86IHsgdXJsOiBcImh0dHBzOi8vc3RhdHMubGUtZmFiLWxhYi5jb20vXCIsIHNpdGVJZDogXCI1XCIgfSxcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gR0VTVElPTiBERSBMQSBQQUdFIERVIEZJTkFOQ0VNRU5UIFBBUlRJQ0lQQVRJRiAoU0FOUyBERVZPSVIgw4pUUkUgQ09OTkVDVMOJKVxuXG4vLy8gUGVybWV0IGQnYWZmaWNoZXIgbGVzIGJvdXRvbnMgZGUgcGFpZW1lbnQgV1Agc3VpdmFudCBsZSBjaG9peCBkZSBsJ3V0aWxpc2F0ZXVyLlxuLy8vIE1hdG9tbyBlc3Qgw6lnYWxlbWVudCBhY3RpdsOpIHNpIGwnaW50ZXJuYXV0ZSBuJ2VzdCBwYXMgY29ubmVjdMOpLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGxvYWRNYXRvbW8gfSBmcm9tIFwiLi90b29scy9tYXRvbW8uanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5pbXBvcnQgeyBzaG93QnRuUGF5bWVudCwgdW5DaGVja0FsbE90aGVycyB9IGZyb20gXCIuL3Rvb2xzL3dlYnBvcnRhZ2UuanNcIjtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG9uIGNoYW5nZSBsZSBsaWVuIGR1IGNvbXB0ZSBlbiBoYXV0IDpcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdUZW1wbGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbG9hZE1hdG9tbygpO1xuXG4gICAgICAgIC8vIExlcyBib3V0b25zIGRlIHBhaWVtZW50IFdQIDogICAgICAgIFxuICAgICAgICBjb25zdCBDR1Y9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJDR1ZPa1wiKTtcbiAgICAgICAgY29uc3QgYWJvMT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzFcIik7XG4gICAgICAgIGNvbnN0IGFibzI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8yXCIpO1xuICAgICAgICBjb25zdCBhYm8zPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvM1wiKTtcbiAgICAgICAgY29uc3QgYWJvND1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzRcIik7XG4gICAgICAgIGNvbnN0IGRpdldQQnRucz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuc1wiKTtcbiAgICAgICAgZGl2V1BCdG5zLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgIGFibzEuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvMVwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFibzIuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvMlwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFibzMuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvM1wiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFibzQuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvNFwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIENHVi5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKENHVi5jaGVja2VkPT09dHJ1ZSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXZXUEJ0bnMuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgaWYoYWJvMS5jaGVja2VkPT09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgc2hvd0J0blBheW1lbnQoXCJidG4xXCIpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYoYWJvMi5jaGVja2VkPT09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgc2hvd0J0blBheW1lbnQoXCJidG4yXCIpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYoYWJvMy5jaGVja2VkPT09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgc2hvd0J0blBheW1lbnQoXCJidG4zXCIpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYoYWJvNC5jaGVja2VkPT09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgc2hvd0J0blBheW1lbnQoXCJidG40XCIpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRpdldQQnRucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICBDR1YuY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGl2V1BCdG5zLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IG1hdG9tbyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvbWF0b21vLmpzXCI7XG5cbi8vIEZvbmN0aW9uIGNoYXJnZWFudCBsZSBjb2RlIG1hdG9tb1xuZXhwb3J0IGNvbnN0IGxvYWRNYXRvbW8gPSAoKSA9Plxue1xuICAgIC8vIGNoYXJnZW1lbnQgZGUgbWF0b21vXG4gICAgdmFyIF9wYXEgPSB3aW5kb3cuX3BhcSA9IHdpbmRvdy5fcGFxIHx8IFtdO1xuICAgIC8vYWpvdXQgY25pbCAgOlxuICAgIF9wYXEucHVzaChbZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICBmdW5jdGlvbiBnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0KClcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBub3dUcyA9IE1hdGgucm91bmQobm93LmdldFRpbWUoKSAvIDEwMDApLFxuICAgICAgICAgICAgdmlzaXRvckluZm8gPSBzZWxmLmdldFZpc2l0b3JJbmZvKCk7XG4gICAgICAgICAgICB2YXIgY3JlYXRlVHMgPSBwYXJzZUludCh2aXNpdG9ySW5mb1syXSk7XG4gICAgICAgICAgICB2YXIgY29va2llVGltZW91dCA9IDMzNjk2MDAwOyAvLyAxMyBtb2lzIGVuIHNlY29uZGVzXG4gICAgICAgICAgICB2YXIgb3JpZ2luYWxUaW1lb3V0ID0gY3JlYXRlVHMgKyBjb29raWVUaW1lb3V0IC0gbm93VHM7XG4gICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxUaW1lb3V0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0VmlzaXRvckNvb2tpZVRpbWVvdXQoIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKSApO1xuICAgIH1dKTtcbiAgICAvLy0tZmluIGFqb3V0IGNuaWxcbiAgICBfcGFxLnB1c2goWyd0cmFja1BhZ2VWaWV3J10pO1xuICAgIF9wYXEucHVzaChbJ2VuYWJsZUxpbmtUcmFja2luZyddKTtcbiAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciB1PW1hdG9tby51cmw7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFRyYWNrZXJVcmwnLCB1KydtYXRvbW8ucGhwJ10pO1xuICAgICAgICBfcGFxLnB1c2goWydzZXRTaXRlSWQnLCBtYXRvbW8uc2l0ZUlkXSk7XG4gICAgICAgIHZhciBkPWRvY3VtZW50LCBnPWQuY3JlYXRlRWxlbWVudCgnc2NyaXB0JyksIHM9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0JylbMF07XG4gICAgICAgIGcudHlwZT0ndGV4dC9qYXZhc2NyaXB0JzsgZy5hc3luYz10cnVlOyBnLnNyYz11KydtYXRvbW8uanMnOyBzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGcscyk7XG4gICAgfSkoKTtcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXogb3UgZCd1biBncm91cGUgZGUgcXVpenNcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICAgICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkYXRhcy5Hcm91cElkPWFuc3dlci5Hcm91cElkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iLCJjb25zdCBjaGVja0JveGVzPVxue1xuICAgIFwiQ0dWXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIkNHVk9rXCIpLFxuICAgIFwiYWJvMVwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8xXCIpLFxuICAgIFwiYWJvMlwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8yXCIpLFxuICAgIFwiYWJvM1wiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8zXCIpLFxuICAgIFwiYWJvNFwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm80XCIpXG59XG5jb25zdCBkaXZXUEJ0bnM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bnNcIik7XG5cbi8vIExvcnNxdWUgbCdvbiBzw6lsZWN0aW9ubmUgdW4gbW9udGFudCwgbGVzIGF1dHJlcyBvcHRpb25zICsgbGVzIENHViBzb250IGTDqXPDqWxlY3Rpb25uw6lzXG5leHBvcnQgY29uc3QgdW5DaGVja0FsbE90aGVycyA9IChjaG9pY2UpID0+XG57XG4gICAgZm9yIChsZXQgaWQgaW4gY2hlY2tCb3hlcylcbiAgICB7XG4gICAgICAgIGlmKGlkIT09Y2hvaWNlKVxuICAgICAgICAgICAgY2hlY2tCb3hlc1tpZF0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZGl2V1BCdG5zLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgfVxufVxuXG5cbmNvbnN0IGJ0bnM9XG57XG4gICAgXCJidG4xXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuMVwiKSxcbiAgICBcImJ0bjJcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG4yXCIpLFxuICAgIFwiYnRuM1wiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bjNcIiksXG4gICAgXCJidG40XCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuNFwiKVxufVxuXG4vLyBBZmZpY2hlIGxlIGJvbiBib3V0b24gZGUgcGFpZW1lbnQgZXQgY2FjaGUgbGVzIGF1dHJlc1xuZXhwb3J0IGNvbnN0IHNob3dCdG5QYXltZW50ID0gKGNob2ljZSkgPT5cbntcbiAgICBmb3IgKGxldCBpZCBpbiBidG5zKVxuICAgIHtcbiAgICAgICAgaWYoaWQhPT1jaG9pY2UpXG4gICAgICAgICAgICBidG5zW2lkXS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBidG5zW2lkXS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICB9XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvcGF5bWVudFBhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3dlYnBvcnRhZ2UuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJjb25maWdUZW1wbGF0ZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImlzQ29ubmVjdGVkIiwiY2hlY2tTZXNzaW9uIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwibG9hZE1hdG9tbyIsIkNHViIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJhYm8xIiwiYWJvMiIsImFibzMiLCJhYm80IiwiZGl2V1BCdG5zIiwic3R5bGUiLCJkaXNwbGF5IiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJ1bkNoZWNrQWxsT3RoZXJzIiwiY2hlY2tlZCIsInNob3dCdG5QYXltZW50IiwiY29uc29sZSIsImVycm9yIiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsImpzb24iLCJwYXJzZSIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwiX3BhcSIsIndpbmRvdyIsInB1c2giLCJzZWxmIiwiZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCIsIm5vdyIsIm5vd1RzIiwicm91bmQiLCJnZXRUaW1lIiwidmlzaXRvckluZm8iLCJnZXRWaXNpdG9ySW5mbyIsImNyZWF0ZVRzIiwicGFyc2VJbnQiLCJjb29raWVUaW1lb3V0Iiwib3JpZ2luYWxUaW1lb3V0Iiwic2V0VmlzaXRvckNvb2tpZVRpbWVvdXQiLCJ1IiwiZCIsImciLCJjcmVhdGVFbGVtZW50IiwicyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidHlwZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwidG9rZW4iLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJkYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwibmJRdWVzdGlvbnMiLCJRdWVzdGlvbm5haXJlSWQiLCJHcm91cElkIiwidXJsUmVkaXJlY3Rpb24iLCJtZXNzYWdlIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbmxvYWQiLCJyZXNwb25zZSIsInJlc3BvbnNlVGV4dCIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwibG9jYXRpb24iLCJpbmRleE9mIiwiYXNzaWduIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJzZW5kIiwiY2hlY2tCb3hlcyIsImNob2ljZSIsImJ0bnMiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlD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Y0FBVCxDQUF3QixRQUF4QixDQUhiO0FBSUksVUFBU0QsUUFBUSxDQUFDQyxjQUFULENBQXdCLFFBQXhCO0FBSmIsQ0FEQSxDLENBUUE7O0FBQ08sTUFBTVksY0FBYyxHQUFJdUYsTUFBRCxJQUM5QjtBQUNJLE9BQUssSUFBSWpLLEVBQVQsSUFBZWtLLElBQWYsRUFDQTtBQUNJLFFBQUdsSyxFQUFFLEtBQUdpSyxNQUFSLEVBQ0lDLElBQUksQ0FBQ2xLLEVBQUQsQ0FBSixDQUFTb0UsS0FBVCxDQUFlQyxPQUFmLEdBQXVCLE1BQXZCLENBREosS0FHSTZGLElBQUksQ0FBQ2xLLEVBQUQsQ0FBSixDQUFTb0UsS0FBVCxDQUFlQyxPQUFmLEdBQXVCLE9BQXZCO0FBQ1A7QUFDSixDQVRNLEMiLCJmaWxlIjoiLi9KUy9wYXltZW50UGFnZS5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9wYXltZW50UGFnZS5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCIvLyBTaSBub24gdXRpbGlzw6ksIHN1cHByaW1lciBsJ2FwcGVsIGRlcyBKUyBmcm9udC1lbmQgcHVpcyByZWNvbXBpbGVyLlxuLy8gUmV2b2lyIGNvbW1lbnQgcsOpb3JnYW5pc2VyIGNlbGEgc291cy1mb3JtZSBkZSBtb2R1bGUgaW5kw6lwZW5kYW50LlxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIFN0YXRzIE1hdG9tbyA6XG4gICAgbWF0b21vOiB7IHVybDogXCJodHRwczovL3N0YXRzLmxlLWZhYi1sYWIuY29tL1wiLCBzaXRlSWQ6IFwiNVwiIH0sXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIuKAplwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxuXG4gICAgLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4gICAgLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG4gICAgc3RhdGljIGdldFBhc3N3b3JkIChuYkNhck1pbiwgbmJDYXJNYXgpXG4gICAge1xuICAgICAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgICAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgICAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgICAgICB9XG4gICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICByZXR1cm4gcGFzc3dvcmQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBsaWVucyBkZSBsJ2ludGVyZmFjZVxuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9uc1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIsIHRpdGxlOlwiQWNjw6lkZXIgb3UgY3LDqWV6IHZvdHJlIGNvbXB0ZSBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiLCB0aXRsZTpcIkVuIHNhdm9pciArIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiLCB0aXRsZTpcIlBhZ2UgZCdhY2N1ZWlsXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkxlIGJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiwgdGl0bGU6XCJRdWkgYSBjcsOpw6kgV2lraUxlcm5pID8gUXVlbHMgc29udCB2b3MgZHJvaXRzID9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiLCB0aXRsZTpcIlZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZTogXCJhZG1pbi5odG1sXCIsXG4gICAgY2d1UGFnZTogXCJDR1YtQ0dVLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLCAgICBcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2VUeHQgOiBcIk1hIHBhZ2UgZCdhY2N1ZWlsLlwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgLyogVGV4dGVzIChnw6luw6lyYWwpICovXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbiAgICBsaWNlbmNlVHh0OiBcIkBjb3B5bGVmdCBMZSBjb250ZW51IGRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgP1xcXCI+ZXN0IGxpYnJlPC9hPiBldCB2b3VzIGVzdCBvZmZlcnQgc2FucyBwdWJsaWNpdMOpLiBWb3VzIHBvdXZleiA8YSBocmVmPVxcXCIvcGFydGljaXBlci1maW5hbmNlbWVudC5odG1sXFxcIiB0aXRsZT1cXFwiRmluYW5jZW1lbnQgcGFydGljaXBhdGlmIGF2ZWMgY29udHJlLXBhcnRpZXNcXFwiPnBhcnRpY2lwZXIgw6Agc29uIGZpbmFuY2VtZW50IGVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgLyogUGFnZSBkJ2FjY3VlaWwgKi9cbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiPGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+Ljxicj5Wb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzLCBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLjxicj5EZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgPGI+ZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgY3VsdHVyZSBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBqYXJkaW48L2I+LlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIjxiPlBhcyBkZSBmYWl0cyBhbHRlcm5hdGlmczwvYj4sIHRvdXMgbGVzIGNvbnRlbnVzIHNvbnQgPGI+c291cmPDqXMgcGFyIGRlcyBhcnRpY2xlcyBXaWtpcMOpZGlhPC9iPi48YnI+RXQgdG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwdWJsacOpIHN1ciBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzIHN1ciBjZSBzdWpldFxcXCI+c29udCBwYXJ0YWfDqXMgc291cyBsaWNlbmNlcyBsaWJyZXM8L2E+Ljxicj5MZSB0b3V0IHNhbnMgcHVibGljaXTDqSwgbmkgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzLjxicj48Yj5TdXIgV2lraUxlcm5pLCB2b3VzIGN1bHRpdmV6IHZvdHJlIGphcmRpbiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjwvYj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSA/XCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogIFwiVGVzdGV6IFdpa2lMZXJuaVwiLFxuICAgIGhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZTogIFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIC8qIFBhZ2UgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuLi4gKi8gICBcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIldpa2lMZXJuaSA6IHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiPHA+PGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgcXVlbHF1ZSBjaG9zZSBkZSBub3V2ZWF1PC9iPjxicj5TaSBkZXNzb3VzIGxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4gVm91cyBwb3V2ZXogYXVzc2kgPGEgaHJlZj0nL3F1aXpzL3RoZW1lcy5odG1sJz5wYXJjb3VyaXIgbGUgc2l0ZSBwYXIgdGjDqG1lcyBvdSBtb3RzLWNsw6lzPC9hPi48L3A+XCIsXG4gICAgLyogUGxhbiBkdSBzaXRlLCBsaXN0ZSBkZXMgdGFncyAqLyAgIFxuICAgIHRhZ0xpc3RUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBkZXMgYXJ0aWNsZXMgZXQgcXVpenMgc3VyIGRlIG5vbWJyZXV4IHRow6htZXMgIVwiLFxuICAgIHRhZ0xpc3RNZXRhRGVzYzogXCJXaWtpTGVybmkgOiBkw6ljb3V2cmlyIGxlcyBkaWZmw6lyZW50cyB0aMOobWVzIGFib3Jkw6lzIHBhciBXaWtpTGVybmkuIElueGV4IGR1IHNpdGUuXCIsXG4gICAgdGFnTGlzdEludHJvOiBcIjxoMz5BdmVjIFdpa2lMZXJuaSwgZGV2ZW5leiBmb3J0IGVuIHRow6htZXMuLi4gT3VpIG1haXMgcXVlbHMgdGjDqG1lcyA/IDopPC9oMz48YmxvY2txdW90ZT5BcmlzdG90ZeKArzogwqvigK9M4oCZaG9tbWUgYSBuYXR1cmVsbGVtZW50IGxhIHBhc3Npb24gZGUgY29ubmHDrnRyZeKApuKAr8K7PC9ibG9ja3F1b3RlPlwiLFxuICAgIC8qIFBhZ2UgcXVpenMgKi9cbiAgICBhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQ6IFwiUmVsaXJlXCIsXG4gICAgcXVpekVsZW1lbnRMaW5rc0ludHJvOiBcIkVuIHNhdm9pciBwbHVzXCIsXG4gICAgcXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZTogXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5p4oCvP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIjxwPkxlIHByaW5jaXBlIGVzdCBzaW1wbGXigK86IDxiPnZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpPC9iPi4gUHVpcyB2b3VzIDxiPmFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZTwvYj4uIFN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgPGI+dW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXM8L2I+IGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gQ+KAmWVzdCB0b3Vqb3VycyA8Yj5sZSBjb250ZW51IGRlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pPC9iPiBjb25jZXJuYW50IGxlcyDCq+KAr2Jvbm5lc+KAr8K7IHLDqXBvbnNlcy4gQ+KAmWVzdCB1bmUgZmHDp29uIGRlIHRlc3RlciDDoCBsYSBmb2lzIHZvdHJlIGNhcGFjaXTDqSBk4oCZYXR0ZW50aW9uIGV0IHZvdHJlIG3DqW1vaXJlLiBMZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG7igJlow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPC9wPjxwPjxiPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZOKAmWF1dHJlcyBzb2x1dGlvbnMgcG91ciBhbcOpbGlvcmVyIHZvdHJlIGN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4uIFBvdXIgZW4gc2F2b2lyIHBsdXMsIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBleHBsYW5hdGlvbkVsZW1lbnRUeHQ6IFwiPHA+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBkZSA8Yj5yZWNldm9pciBwYXIgZS1tYWlsIMOgIGxhIGZyw6lxdWVuY2UgY2hvaXNpZSwgZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXM8L2I+IGV0IHBvcnRhbnQgc3VyIGRlcyBzdWpldHMgdHLDqHMgdmFyacOpcyBkZSA8Yj5jdWx0dXJlIGfDqW7DqXJhbGU8L2I+IChhcnRzLCBoaXN0b2lyZSwgbGl0dMOpcmF0dXJlLCBzY2llbmNlcywgZXRjLikuPC9wPjxwPkNlcyBhcnRpY2xlcyBzb250IGJhc8OpcyBzdXIgPGI+dW5lIG91IHBsdXNpZXVycyBwYWdlcyBkZSBXaWtpcMOpZGlhPC9iPiAoZm91cm5pZXMgZW4gbGllbiksIGRvbnQgPGI+aWxzIGV4dHJhaWVudCBjZXJ0YWluZXMgaW5mb3JtYXRpb25zPC9iPi48L3A+PHA+Q2hhcXVlIHPDqXJpZSBk4oCZYXJ0aWNsZXMgZXN0IDxiPnN1aXZpZSBk4oCZdW4gcXVpejwvYj4gcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPC9wPjxwPjxiPlZvdXMgYXBwcmVuZXogYWluc2kgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+IHRyw6hzIHNpbXBsZW1lbnQuPC9wPlwiLFxuICAgIC8qIEF1dHJlcyAqL1xuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICB0d2l0dGVyQWNjb3VudDogXCJXaWtpTGVybmlcIixcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG59OyIsIi8vIC0tIEdFU1RJT04gREUgTEEgUEFHRSBEVSBGSU5BTkNFTUVOVCBQQVJUSUNJUEFUSUYgKFNBTlMgREVWT0lSIMOKVFJFIENPTk5FQ1TDiSlcblxuLy8vIFBlcm1ldCBkJ2FmZmljaGVyIGxlcyBib3V0b25zIGRlIHBhaWVtZW50IFdQIHN1aXZhbnQgbGUgY2hvaXggZGUgbCd1dGlsaXNhdGV1ci5cbi8vLyBNYXRvbW8gZXN0IMOpZ2FsZW1lbnQgYWN0aXbDqSBzaSBsJ2ludGVybmF1dGUgbidlc3QgcGFzIGNvbm5lY3TDqS5cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIHRpcsOpcyBkdSBiYWNrZW5kIDpcbmltcG9ydCB7IGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBsb2FkTWF0b21vIH0gZnJvbSBcIi4vdG9vbHMvbWF0b21vLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuaW1wb3J0IHsgc2hvd0J0blBheW1lbnQsIHVuQ2hlY2tBbGxPdGhlcnMgfSBmcm9tIFwiLi90b29scy93ZWJwb3J0YWdlLmpzXCI7XG5cbmhlbGxvRGV2KCk7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKCk7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBvbiBjaGFuZ2UgbGUgbGllbiBkdSBjb21wdGUgZW4gaGF1dCA6XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGxvYWRNYXRvbW8oKTtcblxuICAgICAgICAvLyBMZXMgYm91dG9ucyBkZSBwYWllbWVudCBXUCA6ICAgICAgICBcbiAgICAgICAgY29uc3QgQ0dWPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiQ0dWT2tcIik7XG4gICAgICAgIGNvbnN0IGFibzE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8xXCIpO1xuICAgICAgICBjb25zdCBhYm8yPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvMlwiKTtcbiAgICAgICAgY29uc3QgYWJvMz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzNcIik7XG4gICAgICAgIGNvbnN0IGFibzQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm80XCIpO1xuICAgICAgICBjb25zdCBkaXZXUEJ0bnM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bnNcIik7XG4gICAgICAgIGRpdldQQnRucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICBhYm8xLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdW5DaGVja0FsbE90aGVycyhcImFibzFcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBhYm8yLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdW5DaGVja0FsbE90aGVycyhcImFibzJcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBhYm8zLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdW5DaGVja0FsbE90aGVycyhcImFibzNcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBhYm80LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAge1xuICAgICAgICAgICAgdW5DaGVja0FsbE90aGVycyhcImFibzRcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBDR1YuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihlKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihDR1YuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGl2V1BCdG5zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgIGlmKGFibzEuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgIHNob3dCdG5QYXltZW50KFwiYnRuMVwiKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmKGFibzIuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgIHNob3dCdG5QYXltZW50KFwiYnRuMlwiKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmKGFibzMuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgIHNob3dCdG5QYXltZW50KFwiYnRuM1wiKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmKGFibzQuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgIHNob3dCdG5QYXltZW50KFwiYnRuNFwiKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkaXZXUEJ0bnMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgQ0dWLmNoZWNrZWQ9ZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRpdldQQnRucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBtYXRvbW8gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL21hdG9tby5qc1wiO1xuXG4vLyBGb25jdGlvbiBjaGFyZ2VhbnQgbGUgY29kZSBtYXRvbW9cbmV4cG9ydCBjb25zdCBsb2FkTWF0b21vID0gKCkgPT5cbntcbiAgICAvLyBjaGFyZ2VtZW50IGRlIG1hdG9tb1xuICAgIHZhciBfcGFxID0gd2luZG93Ll9wYXEgPSB3aW5kb3cuX3BhcSB8fCBbXTtcbiAgICAvL2Fqb3V0IGNuaWwgIDpcbiAgICBfcGFxLnB1c2goW2Z1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgZnVuY3Rpb24gZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgbm93VHMgPSBNYXRoLnJvdW5kKG5vdy5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICAgICAgICAgIHZpc2l0b3JJbmZvID0gc2VsZi5nZXRWaXNpdG9ySW5mbygpO1xuICAgICAgICAgICAgdmFyIGNyZWF0ZVRzID0gcGFyc2VJbnQodmlzaXRvckluZm9bMl0pO1xuICAgICAgICAgICAgdmFyIGNvb2tpZVRpbWVvdXQgPSAzMzY5NjAwMDsgLy8gMTMgbW9pcyBlbiBzZWNvbmRlc1xuICAgICAgICAgICAgdmFyIG9yaWdpbmFsVGltZW91dCA9IGNyZWF0ZVRzICsgY29va2llVGltZW91dCAtIG5vd1RzO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZpc2l0b3JDb29raWVUaW1lb3V0KCBnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0KCkgKTtcbiAgICB9XSk7XG4gICAgLy8tLWZpbiBham91dCBjbmlsXG4gICAgX3BhcS5wdXNoKFsndHJhY2tQYWdlVmlldyddKTtcbiAgICBfcGFxLnB1c2goWydlbmFibGVMaW5rVHJhY2tpbmcnXSk7XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdT1tYXRvbW8udXJsO1xuICAgICAgICBfcGFxLnB1c2goWydzZXRUcmFja2VyVXJsJywgdSsnbWF0b21vLnBocCddKTtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0U2l0ZUlkJywgbWF0b21vLnNpdGVJZF0pO1xuICAgICAgICB2YXIgZD1kb2N1bWVudCwgZz1kLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLCBzPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdO1xuICAgICAgICBnLnR5cGU9J3RleHQvamF2YXNjcmlwdCc7IGcuYXN5bmM9dHJ1ZTsgZy5zcmM9dSsnbWF0b21vLmpzJzsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpO1xuICAgIH0pKCk7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6IG91IGQndW4gZ3JvdXBlIGRlIHF1aXpzXG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICghaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSB8fCAhaXNFbXB0eShhbnN3ZXIuR3JvdXBJZCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkpXG4gICAgICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGF0YXMuR3JvdXBJZD1hbnN3ZXIuR3JvdXBJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59IiwiY29uc3QgY2hlY2tCb3hlcz1cbntcbiAgICBcIkNHVlwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJDR1ZPa1wiKSxcbiAgICBcImFibzFcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvMVwiKSxcbiAgICBcImFibzJcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvMlwiKSxcbiAgICBcImFibzNcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvM1wiKSxcbiAgICBcImFibzRcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvNFwiKVxufVxuY29uc3QgZGl2V1BCdG5zPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG5zXCIpO1xuXG4vLyBMb3JzcXVlIGwnb24gc8OpbGVjdGlvbm5lIHVuIG1vbnRhbnQsIGxlcyBhdXRyZXMgb3B0aW9ucyArIGxlcyBDR1Ygc29udCBkw6lzw6lsZWN0aW9ubsOpc1xuZXhwb3J0IGNvbnN0IHVuQ2hlY2tBbGxPdGhlcnMgPSAoY2hvaWNlKSA9Plxue1xuICAgIGZvciAobGV0IGlkIGluIGNoZWNrQm94ZXMpXG4gICAge1xuICAgICAgICBpZihpZCE9PWNob2ljZSlcbiAgICAgICAgICAgIGNoZWNrQm94ZXNbaWRdLmNoZWNrZWQ9ZmFsc2U7XG4gICAgICAgIGRpdldQQnRucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgIH1cbn1cblxuXG5jb25zdCBidG5zPVxue1xuICAgIFwiYnRuMVwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bjFcIiksXG4gICAgXCJidG4yXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuMlwiKSxcbiAgICBcImJ0bjNcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG4zXCIpLFxuICAgIFwiYnRuNFwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bjRcIilcbn1cblxuLy8gQWZmaWNoZSBsZSBib24gYm91dG9uIGRlIHBhaWVtZW50IGV0IGNhY2hlIGxlcyBhdXRyZXNcbmV4cG9ydCBjb25zdCBzaG93QnRuUGF5bWVudCA9IChjaG9pY2UpID0+XG57XG4gICAgZm9yIChsZXQgaWQgaW4gYnRucylcbiAgICB7XG4gICAgICAgIGlmKGlkIT09Y2hvaWNlKVxuICAgICAgICAgICAgYnRuc1tpZF0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgYnRuc1tpZF0uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgfVxufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/polyfill.app.js b/front/public/JS/polyfill.app.js index ecc7dc4..2010282 100644 --- a/front/public/JS/polyfill.app.js +++ b/front/public/JS/polyfill.app.js @@ -98,7 +98,7 @@ __webpack_require__(/*! core-js/shim */ "./node_modules/core-js/shim.js"); -__webpack_require__(/*! regenerator-runtime/runtime */ "./node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js"); +__webpack_require__(/*! regenerator-runtime/runtime */ "./node_modules/regenerator-runtime/runtime.js"); __webpack_require__(/*! core-js/fn/regexp/escape */ "./node_modules/core-js/fn/regexp/escape.js"); @@ -126,754 +126,6 @@ define(String.prototype, "padRight", "".padEnd); /***/ }), -/***/ "./node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js": -/*!*********************************************************************************!*\ - !*** ./node_modules/babel-polyfill/node_modules/regenerator-runtime/runtime.js ***! - \*********************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -/* WEBPACK VAR INJECTION */(function(global) {/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -!(function(global) { - "use strict"; - - var Op = Object.prototype; - var hasOwn = Op.hasOwnProperty; - var undefined; // More compressible than void 0. - var $Symbol = typeof Symbol === "function" ? Symbol : {}; - var iteratorSymbol = $Symbol.iterator || "@@iterator"; - var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; - var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - - var inModule = typeof module === "object"; - var runtime = global.regeneratorRuntime; - if (runtime) { - if (inModule) { - // If regeneratorRuntime is defined globally and we're in a module, - // make the exports object identical to regeneratorRuntime. - module.exports = runtime; - } - // Don't bother evaluating the rest of this file if the runtime was - // already defined globally. - return; - } - - // Define the runtime globally (as expected by generated code) as either - // module.exports (if we're in a module) or a new, empty object. - runtime = global.regeneratorRuntime = inModule ? module.exports : {}; - - function wrap(innerFn, outerFn, self, tryLocsList) { - // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. - var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; - var generator = Object.create(protoGenerator.prototype); - var context = new Context(tryLocsList || []); - - // The ._invoke method unifies the implementations of the .next, - // .throw, and .return methods. - generator._invoke = makeInvokeMethod(innerFn, self, context); - - return generator; - } - runtime.wrap = wrap; - - // Try/catch helper to minimize deoptimizations. Returns a completion - // record like context.tryEntries[i].completion. This interface could - // have been (and was previously) designed to take a closure to be - // invoked without arguments, but in all the cases we care about we - // already have an existing method we want to call, so there's no need - // to create a new function object. We can even get away with assuming - // the method takes exactly one argument, since that happens to be true - // in every case, so we don't have to touch the arguments object. The - // only additional allocation required is the completion record, which - // has a stable shape and so hopefully should be cheap to allocate. - function tryCatch(fn, obj, arg) { - try { - return { type: "normal", arg: fn.call(obj, arg) }; - } catch (err) { - return { type: "throw", arg: err }; - } - } - - var GenStateSuspendedStart = "suspendedStart"; - var GenStateSuspendedYield = "suspendedYield"; - var GenStateExecuting = "executing"; - var GenStateCompleted = "completed"; - - // Returning this object from the innerFn has the same effect as - // breaking out of the dispatch switch statement. - var ContinueSentinel = {}; - - // Dummy constructor functions that we use as the .constructor and - // .constructor.prototype properties for functions that return Generator - // objects. For full spec compliance, you may wish to configure your - // minifier not to mangle the names of these two functions. - function Generator() {} - function GeneratorFunction() {} - function GeneratorFunctionPrototype() {} - - // This is a polyfill for %IteratorPrototype% for environments that - // don't natively support it. - var IteratorPrototype = {}; - IteratorPrototype[iteratorSymbol] = function () { - return this; - }; - - var getProto = Object.getPrototypeOf; - var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); - if (NativeIteratorPrototype && - NativeIteratorPrototype !== Op && - hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { - // This environment has a native %IteratorPrototype%; use it instead - // of the polyfill. - IteratorPrototype = NativeIteratorPrototype; - } - - var Gp = GeneratorFunctionPrototype.prototype = - Generator.prototype = Object.create(IteratorPrototype); - GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; - GeneratorFunctionPrototype.constructor = GeneratorFunction; - GeneratorFunctionPrototype[toStringTagSymbol] = - GeneratorFunction.displayName = "GeneratorFunction"; - - // Helper for defining the .next, .throw, and .return methods of the - // Iterator interface in terms of a single ._invoke method. - function defineIteratorMethods(prototype) { - ["next", "throw", "return"].forEach(function(method) { - prototype[method] = function(arg) { - return this._invoke(method, arg); - }; - }); - } - - runtime.isGeneratorFunction = function(genFun) { - var ctor = typeof genFun === "function" && genFun.constructor; - return ctor - ? ctor === GeneratorFunction || - // For the native GeneratorFunction constructor, the best we can - // do is to check its .name property. - (ctor.displayName || ctor.name) === "GeneratorFunction" - : false; - }; - - runtime.mark = function(genFun) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); - } else { - genFun.__proto__ = GeneratorFunctionPrototype; - if (!(toStringTagSymbol in genFun)) { - genFun[toStringTagSymbol] = "GeneratorFunction"; - } - } - genFun.prototype = Object.create(Gp); - return genFun; - }; - - // Within the body of any async function, `await x` is transformed to - // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test - // `hasOwn.call(value, "__await")` to determine if the yielded value is - // meant to be awaited. - runtime.awrap = function(arg) { - return { __await: arg }; - }; - - function AsyncIterator(generator) { - function invoke(method, arg, resolve, reject) { - var record = tryCatch(generator[method], generator, arg); - if (record.type === "throw") { - reject(record.arg); - } else { - var result = record.arg; - var value = result.value; - if (value && - typeof value === "object" && - hasOwn.call(value, "__await")) { - return Promise.resolve(value.__await).then(function(value) { - invoke("next", value, resolve, reject); - }, function(err) { - invoke("throw", err, resolve, reject); - }); - } - - return Promise.resolve(value).then(function(unwrapped) { - // When a yielded Promise is resolved, its final value becomes - // the .value of the Promise<{value,done}> result for the - // current iteration. If the Promise is rejected, however, the - // result for this iteration will be rejected with the same - // reason. Note that rejections of yielded Promises are not - // thrown back into the generator function, as is the case - // when an awaited Promise is rejected. This difference in - // behavior between yield and await is important, because it - // allows the consumer to decide what to do with the yielded - // rejection (swallow it and continue, manually .throw it back - // into the generator, abandon iteration, whatever). With - // await, by contrast, there is no opportunity to examine the - // rejection reason outside the generator function, so the - // only option is to throw it from the await expression, and - // let the generator function handle the exception. - result.value = unwrapped; - resolve(result); - }, reject); - } - } - - if (typeof global.process === "object" && global.process.domain) { - invoke = global.process.domain.bind(invoke); - } - - var previousPromise; - - function enqueue(method, arg) { - function callInvokeWithMethodAndArg() { - return new Promise(function(resolve, reject) { - invoke(method, arg, resolve, reject); - }); - } - - return previousPromise = - // If enqueue has been called before, then we want to wait until - // all previous Promises have been resolved before calling invoke, - // so that results are always delivered in the correct order. If - // enqueue has not been called before, then it is important to - // call invoke immediately, without waiting on a callback to fire, - // so that the async generator function has the opportunity to do - // any necessary setup in a predictable way. This predictability - // is why the Promise constructor synchronously invokes its - // executor callback, and why async functions synchronously - // execute code before the first await. Since we implement simple - // async functions in terms of async generators, it is especially - // important to get this right, even though it requires care. - previousPromise ? previousPromise.then( - callInvokeWithMethodAndArg, - // Avoid propagating failures to Promises returned by later - // invocations of the iterator. - callInvokeWithMethodAndArg - ) : callInvokeWithMethodAndArg(); - } - - // Define the unified helper method that is used to implement .next, - // .throw, and .return (see defineIteratorMethods). - this._invoke = enqueue; - } - - defineIteratorMethods(AsyncIterator.prototype); - AsyncIterator.prototype[asyncIteratorSymbol] = function () { - return this; - }; - runtime.AsyncIterator = AsyncIterator; - - // Note that simple async functions are implemented on top of - // AsyncIterator objects; they just return a Promise for the value of - // the final result produced by the iterator. - runtime.async = function(innerFn, outerFn, self, tryLocsList) { - var iter = new AsyncIterator( - wrap(innerFn, outerFn, self, tryLocsList) - ); - - return runtime.isGeneratorFunction(outerFn) - ? iter // If outerFn is a generator, return the full iterator. - : iter.next().then(function(result) { - return result.done ? result.value : iter.next(); - }); - }; - - function makeInvokeMethod(innerFn, self, context) { - var state = GenStateSuspendedStart; - - return function invoke(method, arg) { - if (state === GenStateExecuting) { - throw new Error("Generator is already running"); - } - - if (state === GenStateCompleted) { - if (method === "throw") { - throw arg; - } - - // Be forgiving, per 25.3.3.3.3 of the spec: - // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume - return doneResult(); - } - - context.method = method; - context.arg = arg; - - while (true) { - var delegate = context.delegate; - if (delegate) { - var delegateResult = maybeInvokeDelegate(delegate, context); - if (delegateResult) { - if (delegateResult === ContinueSentinel) continue; - return delegateResult; - } - } - - if (context.method === "next") { - // Setting context._sent for legacy support of Babel's - // function.sent implementation. - context.sent = context._sent = context.arg; - - } else if (context.method === "throw") { - if (state === GenStateSuspendedStart) { - state = GenStateCompleted; - throw context.arg; - } - - context.dispatchException(context.arg); - - } else if (context.method === "return") { - context.abrupt("return", context.arg); - } - - state = GenStateExecuting; - - var record = tryCatch(innerFn, self, context); - if (record.type === "normal") { - // If an exception is thrown from innerFn, we leave state === - // GenStateExecuting and loop back for another invocation. - state = context.done - ? GenStateCompleted - : GenStateSuspendedYield; - - if (record.arg === ContinueSentinel) { - continue; - } - - return { - value: record.arg, - done: context.done - }; - - } else if (record.type === "throw") { - state = GenStateCompleted; - // Dispatch the exception by looping back around to the - // context.dispatchException(context.arg) call above. - context.method = "throw"; - context.arg = record.arg; - } - } - }; - } - - // Call delegate.iterator[context.method](context.arg) and handle the - // result, either by returning a { value, done } result from the - // delegate iterator, or by modifying context.method and context.arg, - // setting context.delegate to null, and returning the ContinueSentinel. - function maybeInvokeDelegate(delegate, context) { - var method = delegate.iterator[context.method]; - if (method === undefined) { - // A .throw or .return when the delegate iterator has no .throw - // method always terminates the yield* loop. - context.delegate = null; - - if (context.method === "throw") { - if (delegate.iterator.return) { - // If the delegate iterator has a return method, give it a - // chance to clean up. - context.method = "return"; - context.arg = undefined; - maybeInvokeDelegate(delegate, context); - - if (context.method === "throw") { - // If maybeInvokeDelegate(context) changed context.method from - // "return" to "throw", let that override the TypeError below. - return ContinueSentinel; - } - } - - context.method = "throw"; - context.arg = new TypeError( - "The iterator does not provide a 'throw' method"); - } - - return ContinueSentinel; - } - - var record = tryCatch(method, delegate.iterator, context.arg); - - if (record.type === "throw") { - context.method = "throw"; - context.arg = record.arg; - context.delegate = null; - return ContinueSentinel; - } - - var info = record.arg; - - if (! info) { - context.method = "throw"; - context.arg = new TypeError("iterator result is not an object"); - context.delegate = null; - return ContinueSentinel; - } - - if (info.done) { - // Assign the result of the finished delegate to the temporary - // variable specified by delegate.resultName (see delegateYield). - context[delegate.resultName] = info.value; - - // Resume execution at the desired location (see delegateYield). - context.next = delegate.nextLoc; - - // If context.method was "throw" but the delegate handled the - // exception, let the outer generator proceed normally. If - // context.method was "next", forget context.arg since it has been - // "consumed" by the delegate iterator. If context.method was - // "return", allow the original .return call to continue in the - // outer generator. - if (context.method !== "return") { - context.method = "next"; - context.arg = undefined; - } - - } else { - // Re-yield the result returned by the delegate method. - return info; - } - - // The delegate iterator is finished, so forget it and continue with - // the outer generator. - context.delegate = null; - return ContinueSentinel; - } - - // Define Generator.prototype.{next,throw,return} in terms of the - // unified ._invoke helper method. - defineIteratorMethods(Gp); - - Gp[toStringTagSymbol] = "Generator"; - - // A Generator should always return itself as the iterator object when the - // @@iterator function is called on it. Some browsers' implementations of the - // iterator prototype chain incorrectly implement this, causing the Generator - // object to not be returned from this call. This ensures that doesn't happen. - // See https://github.com/facebook/regenerator/issues/274 for more details. - Gp[iteratorSymbol] = function() { - return this; - }; - - Gp.toString = function() { - return "[object Generator]"; - }; - - function pushTryEntry(locs) { - var entry = { tryLoc: locs[0] }; - - if (1 in locs) { - entry.catchLoc = locs[1]; - } - - if (2 in locs) { - entry.finallyLoc = locs[2]; - entry.afterLoc = locs[3]; - } - - this.tryEntries.push(entry); - } - - function resetTryEntry(entry) { - var record = entry.completion || {}; - record.type = "normal"; - delete record.arg; - entry.completion = record; - } - - function Context(tryLocsList) { - // The root entry object (effectively a try statement without a catch - // or a finally block) gives us a place to store values thrown from - // locations where there is no enclosing try statement. - this.tryEntries = [{ tryLoc: "root" }]; - tryLocsList.forEach(pushTryEntry, this); - this.reset(true); - } - - runtime.keys = function(object) { - var keys = []; - for (var key in object) { - keys.push(key); - } - keys.reverse(); - - // Rather than returning an object with a next method, we keep - // things simple and return the next function itself. - return function next() { - while (keys.length) { - var key = keys.pop(); - if (key in object) { - next.value = key; - next.done = false; - return next; - } - } - - // To avoid creating an additional object, we just hang the .value - // and .done properties off the next function object itself. This - // also ensures that the minifier will not anonymize the function. - next.done = true; - return next; - }; - }; - - function values(iterable) { - if (iterable) { - var iteratorMethod = iterable[iteratorSymbol]; - if (iteratorMethod) { - return iteratorMethod.call(iterable); - } - - if (typeof iterable.next === "function") { - return iterable; - } - - if (!isNaN(iterable.length)) { - var i = -1, next = function next() { - while (++i < iterable.length) { - if (hasOwn.call(iterable, i)) { - next.value = iterable[i]; - next.done = false; - return next; - } - } - - next.value = undefined; - next.done = true; - - return next; - }; - - return next.next = next; - } - } - - // Return an iterator with no values. - return { next: doneResult }; - } - runtime.values = values; - - function doneResult() { - return { value: undefined, done: true }; - } - - Context.prototype = { - constructor: Context, - - reset: function(skipTempReset) { - this.prev = 0; - this.next = 0; - // Resetting context._sent for legacy support of Babel's - // function.sent implementation. - this.sent = this._sent = undefined; - this.done = false; - this.delegate = null; - - this.method = "next"; - this.arg = undefined; - - this.tryEntries.forEach(resetTryEntry); - - if (!skipTempReset) { - for (var name in this) { - // Not sure about the optimal order of these conditions: - if (name.charAt(0) === "t" && - hasOwn.call(this, name) && - !isNaN(+name.slice(1))) { - this[name] = undefined; - } - } - } - }, - - stop: function() { - this.done = true; - - var rootEntry = this.tryEntries[0]; - var rootRecord = rootEntry.completion; - if (rootRecord.type === "throw") { - throw rootRecord.arg; - } - - return this.rval; - }, - - dispatchException: function(exception) { - if (this.done) { - throw exception; - } - - var context = this; - function handle(loc, caught) { - record.type = "throw"; - record.arg = exception; - context.next = loc; - - if (caught) { - // If the dispatched exception was caught by a catch block, - // then let that catch block handle the exception normally. - context.method = "next"; - context.arg = undefined; - } - - return !! caught; - } - - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - var record = entry.completion; - - if (entry.tryLoc === "root") { - // Exception thrown outside of any try block that could handle - // it, so set the completion value of the entire function to - // throw the exception. - return handle("end"); - } - - if (entry.tryLoc <= this.prev) { - var hasCatch = hasOwn.call(entry, "catchLoc"); - var hasFinally = hasOwn.call(entry, "finallyLoc"); - - if (hasCatch && hasFinally) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } else if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - - } else if (hasCatch) { - if (this.prev < entry.catchLoc) { - return handle(entry.catchLoc, true); - } - - } else if (hasFinally) { - if (this.prev < entry.finallyLoc) { - return handle(entry.finallyLoc); - } - - } else { - throw new Error("try statement without catch or finally"); - } - } - } - }, - - abrupt: function(type, arg) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc <= this.prev && - hasOwn.call(entry, "finallyLoc") && - this.prev < entry.finallyLoc) { - var finallyEntry = entry; - break; - } - } - - if (finallyEntry && - (type === "break" || - type === "continue") && - finallyEntry.tryLoc <= arg && - arg <= finallyEntry.finallyLoc) { - // Ignore the finally entry if control is not jumping to a - // location outside the try/catch block. - finallyEntry = null; - } - - var record = finallyEntry ? finallyEntry.completion : {}; - record.type = type; - record.arg = arg; - - if (finallyEntry) { - this.method = "next"; - this.next = finallyEntry.finallyLoc; - return ContinueSentinel; - } - - return this.complete(record); - }, - - complete: function(record, afterLoc) { - if (record.type === "throw") { - throw record.arg; - } - - if (record.type === "break" || - record.type === "continue") { - this.next = record.arg; - } else if (record.type === "return") { - this.rval = this.arg = record.arg; - this.method = "return"; - this.next = "end"; - } else if (record.type === "normal" && afterLoc) { - this.next = afterLoc; - } - - return ContinueSentinel; - }, - - finish: function(finallyLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.finallyLoc === finallyLoc) { - this.complete(entry.completion, entry.afterLoc); - resetTryEntry(entry); - return ContinueSentinel; - } - } - }, - - "catch": function(tryLoc) { - for (var i = this.tryEntries.length - 1; i >= 0; --i) { - var entry = this.tryEntries[i]; - if (entry.tryLoc === tryLoc) { - var record = entry.completion; - if (record.type === "throw") { - var thrown = record.arg; - resetTryEntry(entry); - } - return thrown; - } - } - - // The context.catch method must only be called with a location - // argument that corresponds to a known catch block. - throw new Error("illegal catch attempt"); - }, - - delegateYield: function(iterable, resultName, nextLoc) { - this.delegate = { - iterator: values(iterable), - resultName: resultName, - nextLoc: nextLoc - }; - - if (this.method === "next") { - // Deliberately forget the last sent value so that we don't - // accidentally pass it on to the delegate. - this.arg = undefined; - } - - return ContinueSentinel; - } - }; -})( - // Among the various tricks for obtaining a reference to the global - // object, this seems to be the most reliable technique that does not - // use indirect eval (which violates Content Security Policy). - typeof global === "object" ? global : - typeof window === "object" ? window : - typeof self === "object" ? self : this -); - -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) - -/***/ }), - /***/ "./node_modules/core-js/fn/regexp/escape.js": /*!**************************************************!*\ !*** ./node_modules/core-js/fn/regexp/escape.js ***! @@ -1707,7 +959,7 @@ module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { /*! no static exports found */ /***/ (function(module, exports) { -var core = module.exports = { version: '2.6.11' }; +var core = module.exports = { version: '2.6.12' }; if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef @@ -3906,7 +3158,7 @@ var store = global[SHARED] || (global[SHARED] = {}); })('versions', []).push({ version: core.version, mode: __webpack_require__(/*! ./_library */ "./node_modules/core-js/modules/_library.js") ? 'pure' : 'global', - copyright: '© 2019 Denis Pushkarev (zloirock.ru)' + copyright: '© 2020 Denis Pushkarev (zloirock.ru)' }); @@ -10575,8 +9827,13 @@ $export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(/*! ./_colle // https://github.com/mathiasbynens/String.prototype.at var $export = __webpack_require__(/*! ./_export */ "./node_modules/core-js/modules/_export.js"); var $at = __webpack_require__(/*! ./_string-at */ "./node_modules/core-js/modules/_string-at.js")(true); +var $fails = __webpack_require__(/*! ./_fails */ "./node_modules/core-js/modules/_fails.js"); -$export($export.P, 'String', { +var FORCED = $fails(function () { + return '𠮷'.at(0) !== '𠮷'; +}); + +$export($export.P + $export.F * FORCED, 'String', { at: function at(pos) { return $at(this, pos); } @@ -11132,6 +10389,754 @@ __webpack_require__(/*! ./modules/web.dom.iterable */ "./node_modules/core-js/mo module.exports = __webpack_require__(/*! ./modules/_core */ "./node_modules/core-js/modules/_core.js"); +/***/ }), + +/***/ "./node_modules/regenerator-runtime/runtime.js": +/*!*****************************************************!*\ + !*** ./node_modules/regenerator-runtime/runtime.js ***! + \*****************************************************/ +/*! no static exports found */ +/***/ (function(module, exports, __webpack_require__) { + +/* WEBPACK VAR INJECTION */(function(global) {/** + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * https://raw.github.com/facebook/regenerator/master/LICENSE file. An + * additional grant of patent rights can be found in the PATENTS file in + * the same directory. + */ + +!(function(global) { + "use strict"; + + var Op = Object.prototype; + var hasOwn = Op.hasOwnProperty; + var undefined; // More compressible than void 0. + var $Symbol = typeof Symbol === "function" ? Symbol : {}; + var iteratorSymbol = $Symbol.iterator || "@@iterator"; + var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; + var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; + + var inModule = typeof module === "object"; + var runtime = global.regeneratorRuntime; + if (runtime) { + if (inModule) { + // If regeneratorRuntime is defined globally and we're in a module, + // make the exports object identical to regeneratorRuntime. + module.exports = runtime; + } + // Don't bother evaluating the rest of this file if the runtime was + // already defined globally. + return; + } + + // Define the runtime globally (as expected by generated code) as either + // module.exports (if we're in a module) or a new, empty object. + runtime = global.regeneratorRuntime = inModule ? module.exports : {}; + + function wrap(innerFn, outerFn, self, tryLocsList) { + // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. + var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; + var generator = Object.create(protoGenerator.prototype); + var context = new Context(tryLocsList || []); + + // The ._invoke method unifies the implementations of the .next, + // .throw, and .return methods. + generator._invoke = makeInvokeMethod(innerFn, self, context); + + return generator; + } + runtime.wrap = wrap; + + // Try/catch helper to minimize deoptimizations. Returns a completion + // record like context.tryEntries[i].completion. This interface could + // have been (and was previously) designed to take a closure to be + // invoked without arguments, but in all the cases we care about we + // already have an existing method we want to call, so there's no need + // to create a new function object. We can even get away with assuming + // the method takes exactly one argument, since that happens to be true + // in every case, so we don't have to touch the arguments object. The + // only additional allocation required is the completion record, which + // has a stable shape and so hopefully should be cheap to allocate. + function tryCatch(fn, obj, arg) { + try { + return { type: "normal", arg: fn.call(obj, arg) }; + } catch (err) { + return { type: "throw", arg: err }; + } + } + + var GenStateSuspendedStart = "suspendedStart"; + var GenStateSuspendedYield = "suspendedYield"; + var GenStateExecuting = "executing"; + var GenStateCompleted = "completed"; + + // Returning this object from the innerFn has the same effect as + // breaking out of the dispatch switch statement. + var ContinueSentinel = {}; + + // Dummy constructor functions that we use as the .constructor and + // .constructor.prototype properties for functions that return Generator + // objects. For full spec compliance, you may wish to configure your + // minifier not to mangle the names of these two functions. + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + + // This is a polyfill for %IteratorPrototype% for environments that + // don't natively support it. + var IteratorPrototype = {}; + IteratorPrototype[iteratorSymbol] = function () { + return this; + }; + + var getProto = Object.getPrototypeOf; + var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); + if (NativeIteratorPrototype && + NativeIteratorPrototype !== Op && + hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { + // This environment has a native %IteratorPrototype%; use it instead + // of the polyfill. + IteratorPrototype = NativeIteratorPrototype; + } + + var Gp = GeneratorFunctionPrototype.prototype = + Generator.prototype = Object.create(IteratorPrototype); + GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; + GeneratorFunctionPrototype.constructor = GeneratorFunction; + GeneratorFunctionPrototype[toStringTagSymbol] = + GeneratorFunction.displayName = "GeneratorFunction"; + + // Helper for defining the .next, .throw, and .return methods of the + // Iterator interface in terms of a single ._invoke method. + function defineIteratorMethods(prototype) { + ["next", "throw", "return"].forEach(function(method) { + prototype[method] = function(arg) { + return this._invoke(method, arg); + }; + }); + } + + runtime.isGeneratorFunction = function(genFun) { + var ctor = typeof genFun === "function" && genFun.constructor; + return ctor + ? ctor === GeneratorFunction || + // For the native GeneratorFunction constructor, the best we can + // do is to check its .name property. + (ctor.displayName || ctor.name) === "GeneratorFunction" + : false; + }; + + runtime.mark = function(genFun) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); + } else { + genFun.__proto__ = GeneratorFunctionPrototype; + if (!(toStringTagSymbol in genFun)) { + genFun[toStringTagSymbol] = "GeneratorFunction"; + } + } + genFun.prototype = Object.create(Gp); + return genFun; + }; + + // Within the body of any async function, `await x` is transformed to + // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test + // `hasOwn.call(value, "__await")` to determine if the yielded value is + // meant to be awaited. + runtime.awrap = function(arg) { + return { __await: arg }; + }; + + function AsyncIterator(generator) { + function invoke(method, arg, resolve, reject) { + var record = tryCatch(generator[method], generator, arg); + if (record.type === "throw") { + reject(record.arg); + } else { + var result = record.arg; + var value = result.value; + if (value && + typeof value === "object" && + hasOwn.call(value, "__await")) { + return Promise.resolve(value.__await).then(function(value) { + invoke("next", value, resolve, reject); + }, function(err) { + invoke("throw", err, resolve, reject); + }); + } + + return Promise.resolve(value).then(function(unwrapped) { + // When a yielded Promise is resolved, its final value becomes + // the .value of the Promise<{value,done}> result for the + // current iteration. If the Promise is rejected, however, the + // result for this iteration will be rejected with the same + // reason. Note that rejections of yielded Promises are not + // thrown back into the generator function, as is the case + // when an awaited Promise is rejected. This difference in + // behavior between yield and await is important, because it + // allows the consumer to decide what to do with the yielded + // rejection (swallow it and continue, manually .throw it back + // into the generator, abandon iteration, whatever). With + // await, by contrast, there is no opportunity to examine the + // rejection reason outside the generator function, so the + // only option is to throw it from the await expression, and + // let the generator function handle the exception. + result.value = unwrapped; + resolve(result); + }, reject); + } + } + + if (typeof global.process === "object" && global.process.domain) { + invoke = global.process.domain.bind(invoke); + } + + var previousPromise; + + function enqueue(method, arg) { + function callInvokeWithMethodAndArg() { + return new Promise(function(resolve, reject) { + invoke(method, arg, resolve, reject); + }); + } + + return previousPromise = + // If enqueue has been called before, then we want to wait until + // all previous Promises have been resolved before calling invoke, + // so that results are always delivered in the correct order. If + // enqueue has not been called before, then it is important to + // call invoke immediately, without waiting on a callback to fire, + // so that the async generator function has the opportunity to do + // any necessary setup in a predictable way. This predictability + // is why the Promise constructor synchronously invokes its + // executor callback, and why async functions synchronously + // execute code before the first await. Since we implement simple + // async functions in terms of async generators, it is especially + // important to get this right, even though it requires care. + previousPromise ? previousPromise.then( + callInvokeWithMethodAndArg, + // Avoid propagating failures to Promises returned by later + // invocations of the iterator. + callInvokeWithMethodAndArg + ) : callInvokeWithMethodAndArg(); + } + + // Define the unified helper method that is used to implement .next, + // .throw, and .return (see defineIteratorMethods). + this._invoke = enqueue; + } + + defineIteratorMethods(AsyncIterator.prototype); + AsyncIterator.prototype[asyncIteratorSymbol] = function () { + return this; + }; + runtime.AsyncIterator = AsyncIterator; + + // Note that simple async functions are implemented on top of + // AsyncIterator objects; they just return a Promise for the value of + // the final result produced by the iterator. + runtime.async = function(innerFn, outerFn, self, tryLocsList) { + var iter = new AsyncIterator( + wrap(innerFn, outerFn, self, tryLocsList) + ); + + return runtime.isGeneratorFunction(outerFn) + ? iter // If outerFn is a generator, return the full iterator. + : iter.next().then(function(result) { + return result.done ? result.value : iter.next(); + }); + }; + + function makeInvokeMethod(innerFn, self, context) { + var state = GenStateSuspendedStart; + + return function invoke(method, arg) { + if (state === GenStateExecuting) { + throw new Error("Generator is already running"); + } + + if (state === GenStateCompleted) { + if (method === "throw") { + throw arg; + } + + // Be forgiving, per 25.3.3.3.3 of the spec: + // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume + return doneResult(); + } + + context.method = method; + context.arg = arg; + + while (true) { + var delegate = context.delegate; + if (delegate) { + var delegateResult = maybeInvokeDelegate(delegate, context); + if (delegateResult) { + if (delegateResult === ContinueSentinel) continue; + return delegateResult; + } + } + + if (context.method === "next") { + // Setting context._sent for legacy support of Babel's + // function.sent implementation. + context.sent = context._sent = context.arg; + + } else if (context.method === "throw") { + if (state === GenStateSuspendedStart) { + state = GenStateCompleted; + throw context.arg; + } + + context.dispatchException(context.arg); + + } else if (context.method === "return") { + context.abrupt("return", context.arg); + } + + state = GenStateExecuting; + + var record = tryCatch(innerFn, self, context); + if (record.type === "normal") { + // If an exception is thrown from innerFn, we leave state === + // GenStateExecuting and loop back for another invocation. + state = context.done + ? GenStateCompleted + : GenStateSuspendedYield; + + if (record.arg === ContinueSentinel) { + continue; + } + + return { + value: record.arg, + done: context.done + }; + + } else if (record.type === "throw") { + state = GenStateCompleted; + // Dispatch the exception by looping back around to the + // context.dispatchException(context.arg) call above. + context.method = "throw"; + context.arg = record.arg; + } + } + }; + } + + // Call delegate.iterator[context.method](context.arg) and handle the + // result, either by returning a { value, done } result from the + // delegate iterator, or by modifying context.method and context.arg, + // setting context.delegate to null, and returning the ContinueSentinel. + function maybeInvokeDelegate(delegate, context) { + var method = delegate.iterator[context.method]; + if (method === undefined) { + // A .throw or .return when the delegate iterator has no .throw + // method always terminates the yield* loop. + context.delegate = null; + + if (context.method === "throw") { + if (delegate.iterator.return) { + // If the delegate iterator has a return method, give it a + // chance to clean up. + context.method = "return"; + context.arg = undefined; + maybeInvokeDelegate(delegate, context); + + if (context.method === "throw") { + // If maybeInvokeDelegate(context) changed context.method from + // "return" to "throw", let that override the TypeError below. + return ContinueSentinel; + } + } + + context.method = "throw"; + context.arg = new TypeError( + "The iterator does not provide a 'throw' method"); + } + + return ContinueSentinel; + } + + var record = tryCatch(method, delegate.iterator, context.arg); + + if (record.type === "throw") { + context.method = "throw"; + context.arg = record.arg; + context.delegate = null; + return ContinueSentinel; + } + + var info = record.arg; + + if (! info) { + context.method = "throw"; + context.arg = new TypeError("iterator result is not an object"); + context.delegate = null; + return ContinueSentinel; + } + + if (info.done) { + // Assign the result of the finished delegate to the temporary + // variable specified by delegate.resultName (see delegateYield). + context[delegate.resultName] = info.value; + + // Resume execution at the desired location (see delegateYield). + context.next = delegate.nextLoc; + + // If context.method was "throw" but the delegate handled the + // exception, let the outer generator proceed normally. If + // context.method was "next", forget context.arg since it has been + // "consumed" by the delegate iterator. If context.method was + // "return", allow the original .return call to continue in the + // outer generator. + if (context.method !== "return") { + context.method = "next"; + context.arg = undefined; + } + + } else { + // Re-yield the result returned by the delegate method. + return info; + } + + // The delegate iterator is finished, so forget it and continue with + // the outer generator. + context.delegate = null; + return ContinueSentinel; + } + + // Define Generator.prototype.{next,throw,return} in terms of the + // unified ._invoke helper method. + defineIteratorMethods(Gp); + + Gp[toStringTagSymbol] = "Generator"; + + // A Generator should always return itself as the iterator object when the + // @@iterator function is called on it. Some browsers' implementations of the + // iterator prototype chain incorrectly implement this, causing the Generator + // object to not be returned from this call. This ensures that doesn't happen. + // See https://github.com/facebook/regenerator/issues/274 for more details. + Gp[iteratorSymbol] = function() { + return this; + }; + + Gp.toString = function() { + return "[object Generator]"; + }; + + function pushTryEntry(locs) { + var entry = { tryLoc: locs[0] }; + + if (1 in locs) { + entry.catchLoc = locs[1]; + } + + if (2 in locs) { + entry.finallyLoc = locs[2]; + entry.afterLoc = locs[3]; + } + + this.tryEntries.push(entry); + } + + function resetTryEntry(entry) { + var record = entry.completion || {}; + record.type = "normal"; + delete record.arg; + entry.completion = record; + } + + function Context(tryLocsList) { + // The root entry object (effectively a try statement without a catch + // or a finally block) gives us a place to store values thrown from + // locations where there is no enclosing try statement. + this.tryEntries = [{ tryLoc: "root" }]; + tryLocsList.forEach(pushTryEntry, this); + this.reset(true); + } + + runtime.keys = function(object) { + var keys = []; + for (var key in object) { + keys.push(key); + } + keys.reverse(); + + // Rather than returning an object with a next method, we keep + // things simple and return the next function itself. + return function next() { + while (keys.length) { + var key = keys.pop(); + if (key in object) { + next.value = key; + next.done = false; + return next; + } + } + + // To avoid creating an additional object, we just hang the .value + // and .done properties off the next function object itself. This + // also ensures that the minifier will not anonymize the function. + next.done = true; + return next; + }; + }; + + function values(iterable) { + if (iterable) { + var iteratorMethod = iterable[iteratorSymbol]; + if (iteratorMethod) { + return iteratorMethod.call(iterable); + } + + if (typeof iterable.next === "function") { + return iterable; + } + + if (!isNaN(iterable.length)) { + var i = -1, next = function next() { + while (++i < iterable.length) { + if (hasOwn.call(iterable, i)) { + next.value = iterable[i]; + next.done = false; + return next; + } + } + + next.value = undefined; + next.done = true; + + return next; + }; + + return next.next = next; + } + } + + // Return an iterator with no values. + return { next: doneResult }; + } + runtime.values = values; + + function doneResult() { + return { value: undefined, done: true }; + } + + Context.prototype = { + constructor: Context, + + reset: function(skipTempReset) { + this.prev = 0; + this.next = 0; + // Resetting context._sent for legacy support of Babel's + // function.sent implementation. + this.sent = this._sent = undefined; + this.done = false; + this.delegate = null; + + this.method = "next"; + this.arg = undefined; + + this.tryEntries.forEach(resetTryEntry); + + if (!skipTempReset) { + for (var name in this) { + // Not sure about the optimal order of these conditions: + if (name.charAt(0) === "t" && + hasOwn.call(this, name) && + !isNaN(+name.slice(1))) { + this[name] = undefined; + } + } + } + }, + + stop: function() { + this.done = true; + + var rootEntry = this.tryEntries[0]; + var rootRecord = rootEntry.completion; + if (rootRecord.type === "throw") { + throw rootRecord.arg; + } + + return this.rval; + }, + + dispatchException: function(exception) { + if (this.done) { + throw exception; + } + + var context = this; + function handle(loc, caught) { + record.type = "throw"; + record.arg = exception; + context.next = loc; + + if (caught) { + // If the dispatched exception was caught by a catch block, + // then let that catch block handle the exception normally. + context.method = "next"; + context.arg = undefined; + } + + return !! caught; + } + + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + var record = entry.completion; + + if (entry.tryLoc === "root") { + // Exception thrown outside of any try block that could handle + // it, so set the completion value of the entire function to + // throw the exception. + return handle("end"); + } + + if (entry.tryLoc <= this.prev) { + var hasCatch = hasOwn.call(entry, "catchLoc"); + var hasFinally = hasOwn.call(entry, "finallyLoc"); + + if (hasCatch && hasFinally) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } else if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else if (hasCatch) { + if (this.prev < entry.catchLoc) { + return handle(entry.catchLoc, true); + } + + } else if (hasFinally) { + if (this.prev < entry.finallyLoc) { + return handle(entry.finallyLoc); + } + + } else { + throw new Error("try statement without catch or finally"); + } + } + } + }, + + abrupt: function(type, arg) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc <= this.prev && + hasOwn.call(entry, "finallyLoc") && + this.prev < entry.finallyLoc) { + var finallyEntry = entry; + break; + } + } + + if (finallyEntry && + (type === "break" || + type === "continue") && + finallyEntry.tryLoc <= arg && + arg <= finallyEntry.finallyLoc) { + // Ignore the finally entry if control is not jumping to a + // location outside the try/catch block. + finallyEntry = null; + } + + var record = finallyEntry ? finallyEntry.completion : {}; + record.type = type; + record.arg = arg; + + if (finallyEntry) { + this.method = "next"; + this.next = finallyEntry.finallyLoc; + return ContinueSentinel; + } + + return this.complete(record); + }, + + complete: function(record, afterLoc) { + if (record.type === "throw") { + throw record.arg; + } + + if (record.type === "break" || + record.type === "continue") { + this.next = record.arg; + } else if (record.type === "return") { + this.rval = this.arg = record.arg; + this.method = "return"; + this.next = "end"; + } else if (record.type === "normal" && afterLoc) { + this.next = afterLoc; + } + + return ContinueSentinel; + }, + + finish: function(finallyLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.finallyLoc === finallyLoc) { + this.complete(entry.completion, entry.afterLoc); + resetTryEntry(entry); + return ContinueSentinel; + } + } + }, + + "catch": function(tryLoc) { + for (var i = this.tryEntries.length - 1; i >= 0; --i) { + var entry = this.tryEntries[i]; + if (entry.tryLoc === tryLoc) { + var record = entry.completion; + if (record.type === "throw") { + var thrown = record.arg; + resetTryEntry(entry); + } + return thrown; + } + } + + // The context.catch method must only be called with a location + // argument that corresponds to a known catch block. + throw new Error("illegal catch attempt"); + }, + + delegateYield: function(iterable, resultName, nextLoc) { + this.delegate = { + iterator: values(iterable), + resultName: resultName, + nextLoc: nextLoc + }; + + if (this.method === "next") { + // Deliberately forget the last sent value so that we don't + // accidentally pass it on to the delegate. + this.arg = undefined; + } + + return ContinueSentinel; + } + }; +})( + // Among the various tricks for obtaining a reference to the global + // object, this seems to be the most reliable technique that does not + // use indirect eval (which violates Content Security Policy). + typeof global === "object" ? global : + typeof window === "object" ? window : + typeof self === "object" ? self : this +); + +/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) + /***/ }), /***/ "./node_modules/webpack/buildin/global.js": @@ -11166,4 +11171,4 @@ module.exports = g; /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tdG8tanNvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbnZva2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZXhwbTEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNjYWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZm9yY2VkLXBhbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWZsb2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZXBsYWNlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLWZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcmVwZWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VzZXItYWdlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY29zaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2luaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ibGluay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmltdWxoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcuYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7O0FDbEZBLDhDQUFhOztBQUViLG1CQUFPLENBQUMsb0RBQWM7O0FBRXRCLG1CQUFPLENBQUMsOEdBQTZCOztBQUVyQyxtQkFBTyxDQUFDLDRFQUEwQjs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUMsRTs7Ozs7Ozs7Ozs7O0FDM0JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtB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LDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdHQUFxQztBQUM3QyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFD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LHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNFQUFvQjtBQUM1QixtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxpQkFBaUIsbUJBQU8sQ0FBQyxnRUFBaUI7Ozs7Ozs7Ozs7OztBQ3JNMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDIiwiZmlsZSI6Ii4vSlMvcG9seWZpbGwuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL3NoaW1cIik7XG5cbnJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWVcIik7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGVcIik7XG5cbmlmIChnbG9iYWwuX2JhYmVsUG9seWZpbGwpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgaW5zdGFuY2Ugb2YgYmFiZWwtcG9seWZpbGwgaXMgYWxsb3dlZFwiKTtcbn1cbmdsb2JhbC5fYmFiZWxQb2x5ZmlsbCA9IHRydWU7XG5cbnZhciBERUZJTkVfUFJPUEVSVFkgPSBcImRlZmluZVByb3BlcnR5XCI7XG5mdW5jdGlvbiBkZWZpbmUoTywga2V5LCB2YWx1ZSkge1xuICBPW2tleV0gfHwgT2JqZWN0W0RFRklORV9QUk9QRVJUWV0oTywga2V5LCB7XG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkTGVmdFwiLCBcIlwiLnBhZFN0YXJ0KTtcbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZFJpZ2h0XCIsIFwiXCIucGFkRW5kKTtcblxuXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzLGluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXMsam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIi5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIFtdW2tleV0gJiYgZGVmaW5lKEFycmF5LCBrZXksIEZ1bmN0aW9uLmNhbGwuYmluZChbXVtrZXldKSk7XG59KTsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5SZWdFeHAuZXNjYXBlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIG1zZykge1xuICBpZiAodHlwZW9mIGl0ICE9ICdudW1iZXInICYmIGNvZihpdCkgIT0gJ051bWJlcicpIHRocm93IFR5cGVFcnJvcihtc2cpO1xuICByZXR1cm4gK2l0O1xufTtcbiIsIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gTWF0aC5taW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGVuZFBvcyA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKTtcbiAgd2hpbGUgKGVuZFBvcyA+IGluZGV4KSBPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFMZW4sIG1lbW8sIGlzUmlnaHQpIHtcbiAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGlzUmlnaHQgPyBsZW5ndGggLSAxIDogMDtcbiAgdmFyIGkgPSBpc1JpZ2h0ID8gLTEgOiAxO1xuICBpZiAoYUxlbiA8IDIpIGZvciAoOzspIHtcbiAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleCArPSBpO1xuICAgIGlmIChpc1JpZ2h0ID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgZm9yICg7aXNSaWdodCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICB9XG4gIHJldHVybiBtZW1vO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4vX21ldGEnKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNJWkUgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSc7XG5cbnZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgdmFyIGVudHJ5O1xuICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yIChlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICBpZiAoZW50cnkuayA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBjcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAvLyBmaXJzdCBlbnRyeVxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBmb3IgKHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSksIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucCkgZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm47XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmICh0aGF0Ll9mID09IGVudHJ5KSB0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZiAodGhhdC5fbCA9PSBlbnRyeSkgdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZikge1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh0aGlzLCBOQU1FKVtTSVpFXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgdmFyIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGF0Ll9mKSB0aGF0Ll9mID0gZW50cnk7XG4gICAgICBpZiAocHJldikgcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSB0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQywgTkFNRSwgSVNfTUFQKSB7XG4gICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG4gICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuICAgICRpdGVyRGVmaW5lKEMsIE5BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgdGhpcy5fdCA9IHZhbGlkYXRlKGl0ZXJhdGVkLCBOQU1FKTsgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAgICAgICAgICAgICAgICAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBraW5kID0gdGhhdC5faztcbiAgICAgIHZhciBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG4gIH1cbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIGlmIChjbGFzc29mKHRoaXMpICE9IE5BTUUpIHRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZ2V0V2VhayA9IHJlcXVpcmUoJy4vX21ldGEnKS5nZXRXZWFrO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xudmFyICRoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbnZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICh0aGF0KSB7XG4gIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG59O1xudmFyIFVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYSA9IFtdO1xufTtcbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICB9KTtcbn07XG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5hLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBhcnJheUZpbmRJbmRleCh0aGlzLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgfSk7XG4gICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGlkKys7ICAgICAgLy8gY29sbGVjdGlvbiBpZFxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgLy8gbGVhayBzdG9yZSBmb3IgdW5jYXVnaHQgZnJvemVuIG9iamVjdHNcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMy4zLjIgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjQuMy4zIFdlYWtTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4zLjMuNCBXZWFrTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuNC4zLjQgV2Vha1NldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBkYXRhID0gZ2V0V2Vhayhhbk9iamVjdChrZXkpLCB0cnVlKTtcbiAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgZWxzZSBkYXRhW3RoYXQuX2ldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSykge1xuICB2YXIgQmFzZSA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIEMgPSBCYXNlO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlO1xuICB2YXIgTyA9IHt9O1xuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgcmVkZWZpbmUocHJvdG8sIEtFWSxcbiAgICAgIEtFWSA9PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IHVuZGVmaW5lZCA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQoYSkgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7IHJldHVybiB0aGlzOyB9XG4gICAgICAgIDogZnVuY3Rpb24gc2V0KGEsIGIpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEsIGIpOyByZXR1cm4gdGhpczsgfVxuICAgICk7XG4gIH07XG4gIGlmICh0eXBlb2YgQyAhPSAnZnVuY3Rpb24nIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICB9KSkpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+ICBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHsgbmV3IEMoaXRlcik7IH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGFyZ2V0LCBDLCBOQU1FKTtcbiAgICAgICAgdmFyIHRoYXQgPSBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSgpLCB0YXJnZXQsIEMpO1xuICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgcHJvdG8uY29uc3RydWN0b3IgPSBDO1xuICAgIH1cbiAgICBpZiAoVEhST1dTX09OX1BSSU1JVElWRVMgfHwgQlVHR1lfWkVSTykge1xuICAgICAgZml4TWV0aG9kKCdkZWxldGUnKTtcbiAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICBJU19NQVAgJiYgZml4TWV0aG9kKCdnZXQnKTtcbiAgICB9XG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBwcm90by5jbGVhcikgZGVsZXRlIHByb3RvLmNsZWFyO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEMgIT0gQmFzZSksIE8pO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDO1xufTtcbiIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuMTEnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gIGlmIChpbmRleCBpbiBvYmplY3QpICRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59O1xuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ2V0VGltZSA9IERhdGUucHJvdG90eXBlLmdldFRpbWU7XG52YXIgJHRvSVNPU3RyaW5nID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBseiA9IGZ1bmN0aW9uIChudW0pIHtcbiAgcmV0dXJuIG51bSA+IDkgPyBudW0gOiAnMCcgKyBudW07XG59O1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbm1vZHVsZS5leHBvcnRzID0gKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKC01ZTEzIC0gMSkpICE9ICcwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVonO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoTmFOKSk7XG59KSkgPyBmdW5jdGlvbiB0b0lTT1N0cmluZygpIHtcbiAgaWYgKCFpc0Zpbml0ZShnZXRUaW1lLmNhbGwodGhpcykpKSB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgdmFyIGQgPSB0aGlzO1xuICB2YXIgeSA9IGQuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIG0gPSBkLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICB2YXIgcyA9IHkgPCAwID8gJy0nIDogeSA+IDk5OTkgPyAnKycgOiAnJztcbiAgcmV0dXJuIHMgKyAoJzAwMDAwJyArIE1hdGguYWJzKHkpKS5zbGljZShzID8gLTYgOiAtNCkgK1xuICAgICctJyArIGx6KGQuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICsgbHooZC5nZXRVVENEYXRlKCkpICtcbiAgICAnVCcgKyBseihkLmdldFVUQ0hvdXJzKCkpICsgJzonICsgbHooZC5nZXRVVENNaW51dGVzKCkpICtcbiAgICAnOicgKyBseihkLmdldFVUQ1NlY29uZHMoKSkgKyAnLicgKyAobSA+IDk5ID8gbSA6ICcwJyArIGx6KG0pKSArICdaJztcbn0gOiAkdG9JU09TdHJpbmc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIE5VTUJFUiA9ICdudW1iZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGlmIChoaW50ICE9PSAnc3RyaW5nJyAmJiBoaW50ICE9PSBOVU1CRVIgJiYgaGludCAhPT0gJ2RlZmF1bHQnKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBoaW50Jyk7XG4gIHJldHVybiB0b1ByaW1pdGl2ZShhbk9iamVjdCh0aGlzKSwgaGludCAhPSBOVU1CRVIpO1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwidmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1GbGF0dGVuSW50b0FycmF5XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG5mdW5jdGlvbiBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gY3R4KG1hcHBlciwgdGhpc0FyZywgMykgOiBmYWxzZTtcbiAgdmFyIGVsZW1lbnQsIHNwcmVhZGFibGU7XG5cbiAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc291cmNlTGVuKSB7XG4gICAgaWYgKHNvdXJjZUluZGV4IGluIHNvdXJjZSkge1xuICAgICAgZWxlbWVudCA9IG1hcEZuID8gbWFwRm4oc291cmNlW3NvdXJjZUluZGV4XSwgc291cmNlSW5kZXgsIG9yaWdpbmFsKSA6IHNvdXJjZVtzb3VyY2VJbmRleF07XG5cbiAgICAgIHNwcmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmIChpc09iamVjdChlbGVtZW50KSkge1xuICAgICAgICBzcHJlYWRhYmxlID0gZWxlbWVudFtJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gICAgICAgIHNwcmVhZGFibGUgPSBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3ByZWFkYWJsZSAmJiBkZXB0aCA+IDApIHtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIGVsZW1lbnQsIHRvTGVuZ3RoKGVsZW1lbnQubGVuZ3RoKSwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4ID49IDB4MWZmZmZmZmZmZmZmZmYpIHRocm93IFR5cGVFcnJvcigpO1xuICAgICAgICB0YXJnZXRbdGFyZ2V0SW5kZXhdID0gZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgc291cmNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gdGFyZ2V0SW5kZXg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyIHNpZ24gPSByZXF1aXJlKCcuL19tYXRoLXNpZ24nKTtcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBFUFNJTE9OID0gcG93KDIsIC01Mik7XG52YXIgRVBTSUxPTjMyID0gcG93KDIsIC0yMyk7XG52YXIgTUFYMzIgPSBwb3coMiwgMTI3KSAqICgyIC0gRVBTSUxPTjMyKTtcbnZhciBNSU4zMiA9IHBvdygyLCAtMTI2KTtcblxudmFyIHJvdW5kVGllc1RvRXZlbiA9IGZ1bmN0aW9uIChuKSB7XG4gIHJldHVybiBuICsgMSAvIEVQU0lMT04gLSAxIC8gRVBTSUxPTjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5mcm91bmQgfHwgZnVuY3Rpb24gZnJvdW5kKHgpIHtcbiAgdmFyICRhYnMgPSBNYXRoLmFicyh4KTtcbiAgdmFyICRzaWduID0gc2lnbih4KTtcbiAgdmFyIGEsIHJlc3VsdDtcbiAgaWYgKCRhYnMgPCBNSU4zMikgcmV0dXJuICRzaWduICogcm91bmRUaWVzVG9FdmVuKCRhYnMgLyBNSU4zMiAvIEVQU0lMT04zMikgKiBNSU4zMiAqIEVQU0lMT04zMjtcbiAgYSA9ICgxICsgRVBTSUxPTjMyIC8gRVBTSUxPTikgKiAkYWJzO1xuICByZXN1bHQgPSBhIC0gKGEgLSAkYWJzKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAocmVzdWx0ID4gTUFYMzIgfHwgcmVzdWx0ICE9IHJlc3VsdCkgcmV0dXJuICRzaWduICogSW5maW5pdHk7XG4gIHJldHVybiAkc2lnbiAqIHJlc3VsdDtcbn07XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmxvZzFwIHx8IGZ1bmN0aW9uIGxvZzFwKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID4gLTFlLTggJiYgeCA8IDFlLTggPyB4IC0geCAqIHggLyAyIDogTWF0aC5sb2coMSArIHgpO1xufTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zY2FsZSB8fCBmdW5jdGlvbiBzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgaWYgKFxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDBcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IHggIT0geFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5Mb3cgIT0gaW5Mb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluSGlnaCAhPSBpbkhpZ2hcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IG91dExvdyAhPSBvdXRMb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IG91dEhpZ2ggIT0gb3V0SGlnaFxuICApIHJldHVybiBOYU47XG4gIGlmICh4ID09PSBJbmZpbml0eSB8fCB4ID09PSAtSW5maW5pdHkpIHJldHVybiB4O1xuICByZXR1cm4gKHggLSBpbkxvdykgKiAob3V0SGlnaCAtIG91dExvdykgLyAoaW5IaWdoIC0gaW5Mb3cpICsgb3V0TG93O1xufTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iLCJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iLCJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEZvcmNlZCByZXBsYWNlbWVudCBwcm90b3R5cGUgYWNjZXNzb3JzIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fbGlicmFyeScpIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEsgPSBNYXRoLnJhbmRvbSgpO1xuICAvLyBJbiBGRiB0aHJvd3Mgb25seSBkZWZpbmUgbWV0aG9kc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYsIG5vLXVzZWxlc3MtY2FsbFxuICBfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCwgSywgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgZGVsZXRlIHJlcXVpcmUoJy4vX2dsb2JhbCcpW0tdO1xufSk7XG4iLCJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIiwiLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgUmVmbGVjdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlZmxlY3QgJiYgUmVmbGVjdC5vd25LZXlzIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnT1BOLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHJldHVybiBnZXRTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUZsb2F0O1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xuXG5tb2R1bGUuZXhwb3J0cyA9IDEgLyAkcGFyc2VGbG9hdChyZXF1aXJlKCcuL19zdHJpbmctd3MnKSArICctMCcpICE9PSAtSW5maW5pdHkgPyBmdW5jdGlvbiBwYXJzZUZsb2F0KHN0cikge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICB2YXIgcmVzdWx0ID0gJHBhcnNlRmxvYXQoc3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiBzdHJpbmcuY2hhckF0KDApID09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuIiwidmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlSW50O1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgaGV4ID0gL15bLStdPzBbeFhdLztcblxubW9kdWxlLmV4cG9ydHMgPSAkcGFyc2VJbnQod3MgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod3MgKyAnMHgxNicpICE9PSAyMiA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0ciwgcmFkaXgpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgcmV0dXJuICRwYXJzZUludChzdHJpbmcsIChyYWRpeCA+Pj4gMCkgfHwgKGhleC50ZXN0KHN0cmluZykgPyAxNiA6IDEwKSk7XG59IDogJHBhcnNlSW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgc2FmZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlZ0V4cCwgcmVwbGFjZSkge1xuICB2YXIgcmVwbGFjZXIgPSByZXBsYWNlID09PSBPYmplY3QocmVwbGFjZSkgPyBmdW5jdGlvbiAocGFydCkge1xuICAgIHJldHVybiByZXBsYWNlW3BhcnRdO1xuICB9IDogcmVwbGFjZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBTdHJpbmcoaXQpLnJlcGxhY2UocmVnRXhwLCByZXBsYWNlcik7XG4gIH07XG59O1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsIi8vIGhlbHBlciBmb3IgU3RyaW5nI3tzdGFydHNXaXRoLCBlbmRzV2l0aCwgaW5jbHVkZXN9XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBzZWFyY2hTdHJpbmcsIE5BTUUpIHtcbiAgaWYgKGlzUmVnRXhwKHNlYXJjaFN0cmluZykpIHRocm93IFR5cGVFcnJvcignU3RyaW5nIycgKyBOQU1FICsgXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO1xuICByZXR1cm4gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgcXVvdCA9IC9cIi9nO1xuLy8gQi4yLjMuMi4xIENyZWF0ZUhUTUwoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpXG52YXIgY3JlYXRlSFRNTCA9IGZ1bmN0aW9uIChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIFN0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCBleGVjKSB7XG4gIHZhciBPID0ge307XG4gIE9bTkFNRV0gPSBleGVjKGNyZWF0ZUhUTUwpO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KSwgJ1N0cmluZycsIE8pO1xufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSAnXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDMnICtcbiAgJ1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2luZGV4XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHZhciBudW1iZXIgPSB0b0ludGVnZXIoaXQpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgobnVtYmVyKTtcbiAgaWYgKG51bWJlciAhPT0gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBsZW5ndGghJyk7XG4gIHJldHVybiBsZW5ndGg7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpKSB7XG4gIHZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xuICB2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG4gIHZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG4gIHZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4gIHZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xuICB2YXIgJGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xuICB2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG4gIHZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbiAgdmFyIHByb3BlcnR5RGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbiAgdmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG4gIHZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xuICB2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xuICB2YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbiAgdmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xuICB2YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbiAgdmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbiAgdmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG4gIHZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuICB2YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbiAgdmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xuICB2YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xuICB2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG4gIHZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xuICB2YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbiAgdmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xuICB2YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4gIHZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbiAgdmFyIGNyZWF0ZUFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpO1xuICB2YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuICB2YXIgQXJyYXlJdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xuICB2YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG4gIHZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG4gIHZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbiAgdmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbiAgdmFyIGFycmF5Q29weVdpdGhpbiA9IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJyk7XG4gIHZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbiAgdmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbiAgdmFyIGRQID0gJERQLmY7XG4gIHZhciBnT1BEID0gJEdPUEQuZjtcbiAgdmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbiAgdmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG4gIHZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG4gIHZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuICB2YXIgU0hBUkVEX0JVRkZFUiA9ICdTaGFyZWQnICsgQVJSQVlfQlVGRkVSO1xuICB2YXIgQllURVNfUEVSX0VMRU1FTlQgPSAnQllURVNfUEVSX0VMRU1FTlQnO1xuICB2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXlbUFJPVE9UWVBFXTtcbiAgdmFyICRBcnJheUJ1ZmZlciA9ICRidWZmZXIuQXJyYXlCdWZmZXI7XG4gIHZhciAkRGF0YVZpZXcgPSAkYnVmZmVyLkRhdGFWaWV3O1xuICB2YXIgYXJyYXlGb3JFYWNoID0gY3JlYXRlQXJyYXlNZXRob2QoMCk7XG4gIHZhciBhcnJheUZpbHRlciA9IGNyZWF0ZUFycmF5TWV0aG9kKDIpO1xuICB2YXIgYXJyYXlTb21lID0gY3JlYXRlQXJyYXlNZXRob2QoMyk7XG4gIHZhciBhcnJheUV2ZXJ5ID0gY3JlYXRlQXJyYXlNZXRob2QoNCk7XG4gIHZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbiAgdmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG4gIHZhciBhcnJheUluY2x1ZGVzID0gY3JlYXRlQXJyYXlJbmNsdWRlcyh0cnVlKTtcbiAgdmFyIGFycmF5SW5kZXhPZiA9IGNyZWF0ZUFycmF5SW5jbHVkZXMoZmFsc2UpO1xuICB2YXIgYXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9ycy52YWx1ZXM7XG4gIHZhciBhcnJheUtleXMgPSBBcnJheUl0ZXJhdG9ycy5rZXlzO1xuICB2YXIgYXJyYXlFbnRyaWVzID0gQXJyYXlJdGVyYXRvcnMuZW50cmllcztcbiAgdmFyIGFycmF5TGFzdEluZGV4T2YgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mO1xuICB2YXIgYXJyYXlSZWR1Y2UgPSBBcnJheVByb3RvLnJlZHVjZTtcbiAgdmFyIGFycmF5UmVkdWNlUmlnaHQgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0O1xuICB2YXIgYXJyYXlKb2luID0gQXJyYXlQcm90by5qb2luO1xuICB2YXIgYXJyYXlTb3J0ID0gQXJyYXlQcm90by5zb3J0O1xuICB2YXIgYXJyYXlTbGljZSA9IEFycmF5UHJvdG8uc2xpY2U7XG4gIHZhciBhcnJheVRvU3RyaW5nID0gQXJyYXlQcm90by50b1N0cmluZztcbiAgdmFyIGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBBcnJheVByb3RvLnRvTG9jYWxlU3RyaW5nO1xuICB2YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG4gIHZhciBUQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG4gIHZhciBUWVBFRF9DT05TVFJVQ1RPUiA9IHVpZCgndHlwZWRfY29uc3RydWN0b3InKTtcbiAgdmFyIERFRl9DT05TVFJVQ1RPUiA9IHVpZCgnZGVmX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBBTExfQ09OU1RSVUNUT1JTID0gJHR5cGVkLkNPTlNUUjtcbiAgdmFyIFRZUEVEX0FSUkFZID0gJHR5cGVkLlRZUEVEO1xuICB2YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xuICB2YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xuXG4gIHZhciAkbWFwID0gY3JlYXRlQXJyYXlNZXRob2QoMSwgZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICAgIHJldHVybiBhbGxvY2F0ZShzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGVuZ3RoKTtcbiAgfSk7XG5cbiAgdmFyIExJVFRMRV9FTkRJQU4gPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG5ldyBVaW50MTZBcnJheShbMV0pLmJ1ZmZlcilbMF0gPT09IDE7XG4gIH0pO1xuXG4gIHZhciBGT1JDRURfU0VUID0gISFVaW50OEFycmF5ICYmICEhVWludDhBcnJheVtQUk9UT1RZUEVdLnNldCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IFVpbnQ4QXJyYXkoMSkuc2V0KHt9KTtcbiAgfSk7XG5cbiAgdmFyIHRvT2Zmc2V0ID0gZnVuY3Rpb24gKGl0LCBCWVRFUykge1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoaXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfTtcblxuICB2YXIgdmFsaWRhdGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICBpZiAoaXNPYmplY3QoaXQpICYmIFRZUEVEX0FSUkFZIGluIGl0KSByZXR1cm4gaXQ7XG4gICAgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSB0eXBlZCBhcnJheSEnKTtcbiAgfTtcblxuICB2YXIgYWxsb2NhdGUgPSBmdW5jdGlvbiAoQywgbGVuZ3RoKSB7XG4gICAgaWYgKCEoaXNPYmplY3QoQykgJiYgVFlQRURfQ09OU1RSVUNUT1IgaW4gQykpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSXQgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IhJyk7XG4gICAgfSByZXR1cm4gbmV3IEMobGVuZ3RoKTtcbiAgfTtcblxuICB2YXIgc3BlY2llc0Zyb21MaXN0ID0gZnVuY3Rpb24gKE8sIGxpc3QpIHtcbiAgICByZXR1cm4gZnJvbUxpc3Qoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxpc3QpO1xuICB9O1xuXG4gIHZhciBmcm9tTGlzdCA9IGZ1bmN0aW9uIChDLCBsaXN0KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKEMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoaXQsIGtleSwgaW50ZXJuYWwpIHtcbiAgICBkUChpdCwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZFtpbnRlcm5hbF07IH0gfSk7XG4gIH07XG5cbiAgdmFyICRmcm9tID0gZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBmbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3Qoc291cmNlKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGksIGxlbmd0aCwgdmFsdWVzLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICFpc0FycmF5SXRlcihpdGVyRm4pKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHZhbHVlcyA9IFtdLCBpID0gMDsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpKyspIHtcbiAgICAgICAgdmFsdWVzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgICB9IE8gPSB2YWx1ZXM7XG4gICAgfVxuICAgIGlmIChtYXBwaW5nICYmIGFMZW4gPiAyKSBtYXBmbiA9IGN0eChtYXBmbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCksIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7IGxlbmd0aCA+IGk7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gbWFwcGluZyA/IG1hcGZuKE9baV0sIGkpIDogT1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgJG9mID0gZnVuY3Rpb24gb2YoLyogLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIGlPUyBTYWZhcmkgNi54IGZhaWxzIGhlcmVcbiAgdmFyIFRPX0xPQ0FMRV9CVUcgPSAhIVVpbnQ4QXJyYXkgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvTG9jYWxlU3RyaW5nLmNhbGwobmV3IFVpbnQ4QXJyYXkoMSkpOyB9KTtcblxuICB2YXIgJHRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9Mb2NhbGVTdHJpbmcoKSB7XG4gICAgcmV0dXJuIGFycmF5VG9Mb2NhbGVTdHJpbmcuYXBwbHkoVE9fTE9DQUxFX0JVRyA/IGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSkgOiB2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgfTtcblxuICB2YXIgcHJvdG8gPSB7XG4gICAgY29weVdpdGhpbjogZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0IC8qICwgZW5kICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlDb3B5V2l0aGluLmNhbGwodmFsaWRhdGUodGhpcyksIHRhcmdldCwgc3RhcnQsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RXZlcnkodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbGw6IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCwgZW5kICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUZpbGwuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheUZpbHRlcih2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbixcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpKTtcbiAgICB9LFxuICAgIGZpbmQ6IGZ1bmN0aW9uIGZpbmQocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kSW5kZXgodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgYXJyYXlGb3JFYWNoKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluZGV4T2YodmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmNsdWRlcyh2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUxhc3RJbmRleE9mLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbWFwOiBmdW5jdGlvbiBtYXAobWFwZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gJG1hcCh2YWxpZGF0ZSh0aGlzKSwgbWFwZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlUmlnaHQuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlKHRoYXQpLmxlbmd0aDtcbiAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmZsb29yKGxlbmd0aCAvIDIpO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHdoaWxlIChpbmRleCA8IG1pZGRsZSkge1xuICAgICAgICB2YWx1ZSA9IHRoYXRbaW5kZXhdO1xuICAgICAgICB0aGF0W2luZGV4KytdID0gdGhhdFstLWxlbmd0aF07XG4gICAgICAgIHRoYXRbbGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9LFxuICAgIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheVNvbWUodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb3J0LmNhbGwodmFsaWRhdGUodGhpcyksIGNvbXBhcmVmbik7XG4gICAgfSxcbiAgICBzdWJhcnJheTogZnVuY3Rpb24gc3ViYXJyYXkoYmVnaW4sIGVuZCkge1xuICAgICAgdmFyIE8gPSB2YWxpZGF0ZSh0aGlzKTtcbiAgICAgIHZhciBsZW5ndGggPSBPLmxlbmd0aDtcbiAgICAgIHZhciAkYmVnaW4gPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbmd0aCk7XG4gICAgICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSkoXG4gICAgICAgIE8uYnVmZmVyLFxuICAgICAgICBPLmJ5dGVPZmZzZXQgKyAkYmVnaW4gKiBPLkJZVEVTX1BFUl9FTEVNRU5ULFxuICAgICAgICB0b0xlbmd0aCgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpKSAtICRiZWdpbilcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIHZhciAkc2xpY2UgPSBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcyksIHN0YXJ0LCBlbmQpKTtcbiAgfTtcblxuICB2YXIgJHNldCA9IGZ1bmN0aW9uIHNldChhcnJheUxpa2UgLyogLCBvZmZzZXQgKi8pIHtcbiAgICB2YWxpZGF0ZSh0aGlzKTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9PZmZzZXQoYXJndW1lbnRzWzFdLCAxKTtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdmFyIHNyYyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHNyYy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgaWYgKGxlbiArIG9mZnNldCA+IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbikgdGhpc1tvZmZzZXQgKyBpbmRleF0gPSBzcmNbaW5kZXgrK107XG4gIH07XG5cbiAgdmFyICRpdGVyYXRvcnMgPSB7XG4gICAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICAgIHJldHVybiBhcnJheUVudHJpZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgICAgcmV0dXJuIGFycmF5S2V5cy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5VmFsdWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgaXNUQUluZGV4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRhcmdldClcbiAgICAgICYmIHRhcmdldFtUWVBFRF9BUlJBWV1cbiAgICAgICYmIHR5cGVvZiBrZXkgIT0gJ3N5bWJvbCdcbiAgICAgICYmIGtleSBpbiB0YXJnZXRcbiAgICAgICYmIFN0cmluZygra2V5KSA9PSBTdHJpbmcoa2V5KTtcbiAgfTtcbiAgdmFyICRnZXREZXNjID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICA/IHByb3BlcnR5RGVzYygyLCB0YXJnZXRba2V5XSlcbiAgICAgIDogZ09QRCh0YXJnZXQsIGtleSk7XG4gIH07XG4gIHZhciAkc2V0RGVzYyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgaWYgKGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICAmJiBpc09iamVjdChkZXNjKVxuICAgICAgJiYgaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgICAmJiAhaGFzKGRlc2MsICdnZXQnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnc2V0JylcbiAgICAgIC8vIFRPRE86IGFkZCB2YWxpZGF0aW9uIGRlc2NyaXB0b3Igdy9vIGNhbGxpbmcgYWNjZXNzb3JzXG4gICAgICAmJiAhZGVzYy5jb25maWd1cmFibGVcbiAgICAgICYmICghaGFzKGRlc2MsICd3cml0YWJsZScpIHx8IGRlc2Mud3JpdGFibGUpXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnZW51bWVyYWJsZScpIHx8IGRlc2MuZW51bWVyYWJsZSlcbiAgICApIHtcbiAgICAgIHRhcmdldFtrZXldID0gZGVzYy52YWx1ZTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSByZXR1cm4gZFAodGFyZ2V0LCBrZXksIGRlc2MpO1xuICB9O1xuXG4gIGlmICghQUxMX0NPTlNUUlVDVE9SUykge1xuICAgICRHT1BELmYgPSAkZ2V0RGVzYztcbiAgICAkRFAuZiA9ICRzZXREZXNjO1xuICB9XG5cbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhQUxMX0NPTlNUUlVDVE9SUywgJ09iamVjdCcsIHtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXREZXNjLFxuICAgIGRlZmluZVByb3BlcnR5OiAkc2V0RGVzY1xuICB9KTtcblxuICBpZiAoZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvU3RyaW5nLmNhbGwoe30pOyB9KSkge1xuICAgIGFycmF5VG9TdHJpbmcgPSBhcnJheVRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQgPSByZWRlZmluZUFsbCh7fSwgcHJvdG8pO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsICRpdGVyYXRvcnMpO1xuICBoaWRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgSVRFUkFUT1IsICRpdGVyYXRvcnMudmFsdWVzKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCB7XG4gICAgc2xpY2U6ICRzbGljZSxcbiAgICBzZXQ6ICRzZXQsXG4gICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpIHsgLyogbm9vcCAqLyB9LFxuICAgIHRvU3RyaW5nOiBhcnJheVRvU3RyaW5nLFxuICAgIHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmdcbiAgfSk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdidWZmZXInLCAnYicpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZU9mZnNldCcsICdvJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlTGVuZ3RoJywgJ2wnKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2xlbmd0aCcsICdlJyk7XG4gIGRQKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgVEFHLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW1RZUEVEX0FSUkFZXTsgfVxuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBCWVRFUywgd3JhcHBlciwgQ0xBTVBFRCkge1xuICAgIENMQU1QRUQgPSAhIUNMQU1QRUQ7XG4gICAgdmFyIE5BTUUgPSBLRVkgKyAoQ0xBTVBFRCA/ICdDbGFtcGVkJyA6ICcnKSArICdBcnJheSc7XG4gICAgdmFyIEdFVFRFUiA9ICdnZXQnICsgS0VZO1xuICAgIHZhciBTRVRURVIgPSAnc2V0JyArIEtFWTtcbiAgICB2YXIgVHlwZWRBcnJheSA9IGdsb2JhbFtOQU1FXTtcbiAgICB2YXIgQmFzZSA9IFR5cGVkQXJyYXkgfHwge307XG4gICAgdmFyIFRBQyA9IFR5cGVkQXJyYXkgJiYgZ2V0UHJvdG90eXBlT2YoVHlwZWRBcnJheSk7XG4gICAgdmFyIEZPUkNFRCA9ICFUeXBlZEFycmF5IHx8ICEkdHlwZWQuQUJWO1xuICAgIHZhciBPID0ge307XG4gICAgdmFyIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5ICYmIFR5cGVkQXJyYXlbUFJPVE9UWVBFXTtcbiAgICB2YXIgZ2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICByZXR1cm4gZGF0YS52W0dFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgaWYgKENMQU1QRUQpIHZhbHVlID0gKHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSkpIDwgMCA/IDAgOiB2YWx1ZSA+IDB4ZmYgPyAweGZmIDogdmFsdWUgJiAweGZmO1xuICAgICAgZGF0YS52W1NFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgdmFsdWUsIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIGFkZEVsZW1lbnQgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIGRQKHRoYXQsIGluZGV4LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXR0ZXIodGhpcywgaW5kZXgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBzZXR0ZXIodGhpcywgaW5kZXgsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUsICdfZCcpO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIGJ1ZmZlciwgYnl0ZUxlbmd0aCwgbGVuZ3RoLCBrbGFzcztcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgIGxlbmd0aCA9IHRvSW5kZXgoZGF0YSk7XG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IGxlbmd0aCAqIEJZVEVTO1xuICAgICAgICAgIGJ1ZmZlciA9IG5ldyAkQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIGJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgb2Zmc2V0ID0gdG9PZmZzZXQoJG9mZnNldCwgQllURVMpO1xuICAgICAgICAgIHZhciAkbGVuID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGlmICgkbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICgkbGVuICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSAkbGVuIC0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggPCAwKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSB0b0xlbmd0aCgkbGVuZ3RoKSAqIEJZVEVTO1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggKyBvZmZzZXQgPiAkbGVuKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGggLyBCWVRFUztcbiAgICAgICAgfSBlbHNlIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGhpZGUodGhhdCwgJ19kJywge1xuICAgICAgICAgIGI6IGJ1ZmZlcixcbiAgICAgICAgICBvOiBvZmZzZXQsXG4gICAgICAgICAgbDogYnl0ZUxlbmd0aCxcbiAgICAgICAgICBlOiBsZW5ndGgsXG4gICAgICAgICAgdjogbmV3ICREYXRhVmlldyhidWZmZXIpXG4gICAgICAgIH0pO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIGFkZEVsZW1lbnQodGhhdCwgaW5kZXgrKyk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBjcmVhdGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkKTtcbiAgICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgVHlwZWRBcnJheSk7XG4gICAgfSBlbHNlIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheSgxKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0pIHx8ICEkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KG51bGwpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KGl0ZXIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0sIHRydWUpKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUpO1xuICAgICAgICB2YXIga2xhc3M7XG4gICAgICAgIC8vIGB3c2AgbW9kdWxlIGJ1ZywgdGVtcG9yYXJpbHkgcmVtb3ZlIHZhbGlkYXRpb24gbGVuZ3RoIGZvciBVaW50OEFycmF5XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJzb2NrZXRzL3dzL3B1bGwvNjQ1XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHJldHVybiBuZXcgQmFzZSh0b0luZGV4KGRhdGEpKTtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICByZXR1cm4gJGxlbmd0aCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSwgJGxlbmd0aClcbiAgICAgICAgICAgIDogJG9mZnNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpKVxuICAgICAgICAgICAgICA6IG5ldyBCYXNlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBhcnJheUZvckVhY2goVEFDICE9PSBGdW5jdGlvbi5wcm90b3R5cGUgPyBnT1BOKEJhc2UpLmNvbmNhdChnT1BOKFRBQykpIDogZ09QTihCYXNlKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gVHlwZWRBcnJheSkpIGhpZGUoVHlwZWRBcnJheSwga2V5LCBCYXNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBUeXBlZEFycmF5UHJvdG90eXBlO1xuICAgICAgaWYgKCFMSUJSQVJZKSBUeXBlZEFycmF5UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHlwZWRBcnJheTtcbiAgICB9XG4gICAgdmFyICRuYXRpdmVJdGVyYXRvciA9IFR5cGVkQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdO1xuICAgIHZhciBDT1JSRUNUX0lURVJfTkFNRSA9ICEhJG5hdGl2ZUl0ZXJhdG9yXG4gICAgICAmJiAoJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gJ3ZhbHVlcycgfHwgJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gdW5kZWZpbmVkKTtcbiAgICB2YXIgJGl0ZXJhdG9yID0gJGl0ZXJhdG9ycy52YWx1ZXM7XG4gICAgaGlkZShUeXBlZEFycmF5LCBUWVBFRF9DT05TVFJVQ1RPUiwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBUWVBFRF9BUlJBWSwgTkFNRSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIERFRl9DT05TVFJVQ1RPUiwgVHlwZWRBcnJheSk7XG5cbiAgICBpZiAoQ0xBTVBFRCA/IG5ldyBUeXBlZEFycmF5KDEpW1RBR10gIT0gTkFNRSA6ICEoVEFHIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSB7XG4gICAgICBkUChUeXBlZEFycmF5UHJvdG90eXBlLCBUQUcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOQU1FOyB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBPW05BTUVdID0gVHlwZWRBcnJheTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKFR5cGVkQXJyYXkgIT0gQmFzZSksIE8pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMsIE5BTUUsIHtcbiAgICAgIEJZVEVTX1BFUl9FTEVNRU5UOiBCWVRFU1xuICAgIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IEJhc2Uub2YuY2FsbChUeXBlZEFycmF5LCAxKTsgfSksIE5BTUUsIHtcbiAgICAgIGZyb206ICRmcm9tLFxuICAgICAgb2Y6ICRvZlxuICAgIH0pO1xuXG4gICAgaWYgKCEoQllURVNfUEVSX0VMRU1FTlQgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgQllURVNfUEVSX0VMRU1FTlQsIEJZVEVTKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QLCBOQU1FLCBwcm90byk7XG5cbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRURfU0VULCBOQU1FLCB7IHNldDogJHNldCB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIUNPUlJFQ1RfSVRFUl9OQU1FLCBOQU1FLCAkaXRlcmF0b3JzKTtcblxuICAgIGlmICghTElCUkFSWSAmJiBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nICE9IGFycmF5VG9TdHJpbmcpIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgPSBhcnJheVRvU3RyaW5nO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgxKS5zbGljZSgpO1xuICAgIH0pLCBOQU1FLCB7IHNsaWNlOiAkc2xpY2UgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gWzEsIDJdLnRvTG9jYWxlU3RyaW5nKCkgIT0gbmV3IFR5cGVkQXJyYXkoWzEsIDJdKS50b0xvY2FsZVN0cmluZygpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsIDJdKTtcbiAgICB9KSksIE5BTUUsIHsgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZyB9KTtcblxuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IENPUlJFQ1RfSVRFUl9OQU1FID8gJG5hdGl2ZUl0ZXJhdG9yIDogJGl0ZXJhdG9yO1xuICAgIGlmICghTElCUkFSWSAmJiAhQ09SUkVDVF9JVEVSX05BTUUpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgSVRFUkFUT1IsICRpdGVyYXRvcik7XG4gIH07XG59IGVsc2UgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFRZUEVEID0gdWlkKCd0eXBlZF9hcnJheScpO1xudmFyIFZJRVcgPSB1aWQoJ3ZpZXcnKTtcbnZhciBBQlYgPSAhIShnbG9iYWwuQXJyYXlCdWZmZXIgJiYgZ2xvYmFsLkRhdGFWaWV3KTtcbnZhciBDT05TVFIgPSBBQlY7XG52YXIgaSA9IDA7XG52YXIgbCA9IDk7XG52YXIgVHlwZWQ7XG5cbnZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JzID0gKFxuICAnSW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXknXG4pLnNwbGl0KCcsJyk7XG5cbndoaWxlIChpIDwgbCkge1xuICBpZiAoVHlwZWQgPSBnbG9iYWxbVHlwZWRBcnJheUNvbnN0cnVjdG9yc1tpKytdXSkge1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBUWVBFRCwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICB9IGVsc2UgQ09OU1RSID0gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBQlY6IEFCVixcbiAgQ09OU1RSOiBDT05TVFIsXG4gIFRZUEVEOiBUWVBFRCxcbiAgVklFVzogVklFV1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXZlcnkgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5ldmVyeSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjUgLyAxNS40LjQuMTYgQXJyYXkucHJvdG90eXBlLmV2ZXJ5KGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGZpbGw6IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZpbGwnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgyKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZpbHRlciwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjcgLyAxNS40LjQuMjAgQXJyYXkucHJvdG90eXBlLmZpbHRlcihjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyICRuYXRpdmUgPSBbXS5pbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhISRuYXRpdmUgJiYgMSAvIFsxXS5pbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjExIC8gMTUuNC40LjE0IEFycmF5LnByb3RvdHlwZS5pbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/ICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4yLjIgLyAxNS40LjMuMiBBcnJheS5pc0FycmF5KGFyZylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnQXJyYXknLCB7IGlzQXJyYXk6IHJlcXVpcmUoJy4vX2lzLWFycmF5JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5qb2luKHNlcGFyYXRvcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5Sm9pbiA9IFtdLmpvaW47XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBzdHJpbmdzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChyZXF1aXJlKCcuL19pb2JqZWN0JykgIT0gT2JqZWN0IHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoYXJyYXlKb2luKSksICdBcnJheScsIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodG9JT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgJG5hdGl2ZSA9IFtdLmxhc3RJbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhISRuYXRpdmUgJiYgMSAvIFsxXS5sYXN0SW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNCAvIDE1LjQuNC4xNSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICAgIHZhciBPID0gdG9JT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTtcbiAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPKSBpZiAoT1tpbmRleF0gPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBpbmRleCB8fCAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIFdlYktpdCBBcnJheS5vZiBpc24ndCBnZW5lcmljXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKEFycmF5Lm9mLmNhbGwoRikgaW5zdGFuY2VvZiBGKTtcbn0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4zIEFycmF5Lm9mKCAuLi5pdGVtcylcbiAgb2Y6IGZ1bmN0aW9uIG9mKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gbmV3ICh0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5KShhTGVuKTtcbiAgICB3aGlsZSAoYUxlbiA+IGluZGV4KSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBhTGVuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2VSaWdodCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE5IC8gMTUuNC40LjIyIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodChjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5zb21lLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjMgLyAxNS40LjQuMTcgQXJyYXkucHJvdG90eXBlLnNvbWUoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkc29tZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiIsInJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ0FycmF5Jyk7XG4iLCIvLyAyMC4zLjMuMSAvIDE1LjkuNC40IERhdGUubm93KClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRGF0ZScsIHsgbm93OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfSB9KTtcbiIsIi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSVNPU3RyaW5nID0gcmVxdWlyZSgnLi9fZGF0ZS10by1pc28tc3RyaW5nJyk7XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgIT09IHRvSVNPU3RyaW5nKSwgJ0RhdGUnLCB7XG4gIHRvSVNPU3RyaW5nOiB0b0lTT1N0cmluZ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE5hTikudG9KU09OKCkgIT09IG51bGxcbiAgICB8fCBEYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7IHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9IH0pICE9PSAxO1xufSksICdEYXRlJywge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgcHYgPSB0b1ByaW1pdGl2ZShPKTtcbiAgICByZXR1cm4gdHlwZW9mIHB2ID09ICdudW1iZXInICYmICFpc0Zpbml0ZShwdikgPyBudWxsIDogTy50b0lTT1N0cmluZygpO1xuICB9XG59KTtcbiIsInZhciBUT19QUklNSVRJVkUgPSByZXF1aXJlKCcuL193a3MnKSgndG9QcmltaXRpdmUnKTtcbnZhciBwcm90byA9IERhdGUucHJvdG90eXBlO1xuXG5pZiAoIShUT19QUklNSVRJVkUgaW4gcHJvdG8pKSByZXF1aXJlKCcuL19oaWRlJykocHJvdG8sIFRPX1BSSU1JVElWRSwgcmVxdWlyZSgnLi9fZGF0ZS10by1wcmltaXRpdmUnKSk7XG4iLCJ2YXIgRGF0ZVByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG52YXIgSU5WQUxJRF9EQVRFID0gJ0ludmFsaWQgRGF0ZSc7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSBEYXRlUHJvdG9bVE9fU1RSSU5HXTtcbnZhciBnZXRUaW1lID0gRGF0ZVByb3RvLmdldFRpbWU7XG5pZiAobmV3IERhdGUoTmFOKSArICcnICE9IElOVkFMSURfREFURSkge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKERhdGVQcm90bywgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgdmFsdWUgPSBnZXRUaW1lLmNhbGwodGhpcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyAkdG9TdHJpbmcuY2FsbCh0aGlzKSA6IElOVkFMSURfREFURTtcbiAgfSk7XG59XG4iLCIvLyAxOS4yLjMuMiAvIDE1LjMuNC41IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKHRoaXNBcmcsIGFyZ3MuLi4pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0Z1bmN0aW9uJywgeyBiaW5kOiByZXF1aXJlKCcuL19iaW5kJykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBIQVNfSU5TVEFOQ0UgPSByZXF1aXJlKCcuL193a3MnKSgnaGFzSW5zdGFuY2UnKTtcbnZhciBGdW5jdGlvblByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gMTkuMi4zLjYgRnVuY3Rpb24ucHJvdG90eXBlW0BAaGFzSW5zdGFuY2VdKFYpXG5pZiAoIShIQVNfSU5TVEFOQ0UgaW4gRnVuY3Rpb25Qcm90bykpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoRnVuY3Rpb25Qcm90bywgSEFTX0lOU1RBTkNFLCB7IHZhbHVlOiBmdW5jdGlvbiAoTykge1xuICBpZiAodHlwZW9mIHRoaXMgIT0gJ2Z1bmN0aW9uJyB8fCAhaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFpc09iamVjdCh0aGlzLnByb3RvdHlwZSkpIHJldHVybiBPIGluc3RhbmNlb2YgdGhpcztcbiAgLy8gZm9yIGVudmlyb25tZW50IHcvbyBuYXRpdmUgYEBAaGFzSW5zdGFuY2VgIGxvZ2ljIGVub3VnaCBgaW5zdGFuY2VvZmAsIGJ1dCBhZGQgdGhpczpcbiAgd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSkgaWYgKHRoaXMucHJvdG90eXBlID09PSBPKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufSB9KTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgRlByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyAxOS4yLjQuMiBuYW1lXG5OQU1FIGluIEZQcm90byB8fCByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIGRQKEZQcm90bywgTkFNRSwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKCcnICsgdGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE1BUCA9ICdNYXAnO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShNQVAsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7XG4iLCIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiIsIi8vIDIwLjIuMi43IE1hdGguYXRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0YW5oID0gTWF0aC5hdGFuaDtcblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmF0YW5oKC0wKSAtPiAwXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGF0YW5oICYmIDEgLyAkYXRhbmgoLTApIDwgMCksICdNYXRoJywge1xuICBhdGFuaDogZnVuY3Rpb24gYXRhbmgoeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IE1hdGgubG9nKCgxICsgeCkgLyAoMSAtIHgpKSAvIDI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjkgTWF0aC5jYnJ0KHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNpZ24gPSByZXF1aXJlKCcuL19tYXRoLXNpZ24nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjYnJ0OiBmdW5jdGlvbiBjYnJ0KHgpIHtcbiAgICByZXR1cm4gc2lnbih4ID0gK3gpICogTWF0aC5wb3coTWF0aC5hYnMoeCksIDEgLyAzKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTIgTWF0aC5jb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNvc2g6IGZ1bmN0aW9uIGNvc2goeCkge1xuICAgIHJldHVybiAoZXhwKHggPSAreCkgKyBleHAoLXgpKSAvIDI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiIsIi8vIDIwLjIuMi4xNyBNYXRoLmh5cG90KFt2YWx1ZTFbLCB2YWx1ZTJbLCDigKYgXV1dKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBoeXBvdDogZnVuY3Rpb24gaHlwb3QodmFsdWUxLCB2YWx1ZTIpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogTWF0aC5zcXJ0KHN1bSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMSBNYXRoLmxvZzEwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzEwOiBmdW5jdGlvbiBsb2cxMCh4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpICogTWF0aC5MT0cxMEU7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgbG9nMXA6IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKSB9KTtcbiIsIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiIsIi8vIDIwLjIuMi4zMCBNYXRoLnNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbi8vIFY4IG5lYXIgQ2hyb21pdW0gMzggaGFzIGEgcHJvYmxlbSB3aXRoIHZlcnkgc21hbGwgbnVtYmVyc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFNYXRoLnNpbmgoLTJlLTE3KSAhPSAtMmUtMTc7XG59KSwgJ01hdGgnLCB7XG4gIHNpbmg6IGZ1bmN0aW9uIHNpbmgoeCkge1xuICAgIHJldHVybiBNYXRoLmFicyh4ID0gK3gpIDwgMVxuICAgICAgPyAoZXhwbTEoeCkgLSBleHBtMSgteCkpIC8gMlxuICAgICAgOiAoZXhwKHggLSAxKSAtIGV4cCgteCAtIDEpKSAqIChNYXRoLkUgLyAyKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzMgTWF0aC50YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHRhbmg6IGZ1bmN0aW9uIHRhbmgoeCkge1xuICAgIHZhciBhID0gZXhwbTEoeCA9ICt4KTtcbiAgICB2YXIgYiA9IGV4cG0xKC14KTtcbiAgICByZXR1cm4gYSA9PSBJbmZpbml0eSA/IDEgOiBiID09IEluZmluaXR5ID8gLTEgOiAoYSAtIGIpIC8gKGV4cCh4KSArIGV4cCgteCkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zNCBNYXRoLnRydW5jKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHRydW5jOiBmdW5jdGlvbiB0cnVuYyhpdCkge1xuICAgIHJldHVybiAoaXQgPiAwID8gTWF0aC5mbG9vciA6IE1hdGguY2VpbCkoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIE5VTUJFUiA9ICdOdW1iZXInO1xudmFyICROdW1iZXIgPSBnbG9iYWxbTlVNQkVSXTtcbnZhciBCYXNlID0gJE51bWJlcjtcbnZhciBwcm90byA9ICROdW1iZXIucHJvdG90eXBlO1xuLy8gT3BlcmEgfjEyIGhhcyBicm9rZW4gT2JqZWN0I3RvU3RyaW5nXG52YXIgQlJPS0VOX0NPRiA9IGNvZihyZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykocHJvdG8pKSA9PSBOVU1CRVI7XG52YXIgVFJJTSA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgZmFsc2UpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IFRSSU0gPyBpdC50cmltKCkgOiAkdHJpbShpdCwgMyk7XG4gICAgdmFyIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgdGhpcmQsIHJhZGl4LCBtYXhDb2RlO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBkaWdpdHMgPSBpdC5zbGljZSgyKSwgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoLCBjb2RlOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbmlmICghJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpIHtcbiAgJE51bWJlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IHByb3RvLnZhbHVlT2YuY2FsbCh0aGF0KTsgfSkgOiBjb2YodGhhdCkgIT0gTlVNQkVSKVxuICAgICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKHRvTnVtYmVyKGl0KSksIHRoYXQsICROdW1iZXIpIDogdG9OdW1iZXIoaXQpO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhcyhCYXNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKCROdW1iZXIsIGtleSkpIHtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgTlVNQkVSLCAkTnVtYmVyKTtcbn1cbiIsIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiIsIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IGlzSW50ZWdlcjogcmVxdWlyZSgnLi9faXMtaW50ZWdlcicpIH0pO1xuIiwiLy8gMjAuMS4yLjQgTnVtYmVyLmlzTmFOKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc05hTjogZnVuY3Rpb24gaXNOYU4obnVtYmVyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi41IE51bWJlci5pc1NhZmVJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNJbnRlZ2VyID0gcmVxdWlyZSgnLi9faXMtaW50ZWdlcicpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNTYWZlSW50ZWdlcjogZnVuY3Rpb24gaXNTYWZlSW50ZWdlcihudW1iZXIpIHtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKG51bWJlcikgJiYgYWJzKG51bWJlcikgPD0gMHgxZmZmZmZmZmZmZmZmZjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1BWF9TQUZFX0lOVEVHRVI6IDB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCIvLyAyMC4xLjIuMTAgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNSU5fU0FGRV9JTlRFR0VSOiAtMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX3BhcnNlLWludCcpO1xuLy8gMjAuMS4yLjEzIE51bWJlci5wYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlSW50ICE9ICRwYXJzZUludCksICdOdW1iZXInLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHsgYXNzaWduOiByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgY3JlYXRlOiByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSU9iamVjdChpdCksIGtleSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5TmFtZXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKS5mO1xufSk7XG4iLCIvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRQcm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEzIE9iamVjdC5pc1NlYWxlZChPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNTZWFsZWQnLCBmdW5jdGlvbiAoJGlzU2VhbGVkKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc1NlYWxlZChpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNTZWFsZWQgPyAkaXNTZWFsZWQoaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE1IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdwcmV2ZW50RXh0ZW5zaW9ucycsIGZ1bmN0aW9uICgkcHJldmVudEV4dGVuc2lvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKGl0KSB7XG4gICAgcmV0dXJuICRwcmV2ZW50RXh0ZW5zaW9ucyAmJiBpc09iamVjdChpdCkgPyAkcHJldmVudEV4dGVuc2lvbnMobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNyBPYmplY3Quc2VhbChPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdzZWFsJywgZnVuY3Rpb24gKCRzZWFsKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzZWFsKGl0KSB7XG4gICAgcmV0dXJuICRzZWFsICYmIGlzT2JqZWN0KGl0KSA/ICRzZWFsKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMTguMi40IHBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX3BhcnNlLWludCcpO1xuLy8gMTguMi41IHBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUludCAhPSAkcGFyc2VJbnQpLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4IHx8ICcnO1xudmFyICRQcm9taXNlID0gZ2xvYmFsW1BST01JU0VdO1xudmFyIGlzTm9kZSA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xudmFyIGVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIEludGVybmFsLCBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHksIE93blByb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcblxudmFyIFVTRV9OQVRJVkUgPSAhIWZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgIH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZVxuICAgICAgLy8gdjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgICAvLyB3ZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgICAgJiYgdjguaW5kZXhPZignNi42JykgIT09IDBcbiAgICAgICYmIHVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUvNjYnKSA9PT0gLTE7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbiAocHJvbWlzZSwgaXNSZWplY3QpIHtcbiAgaWYgKHByb21pc2UuX24pIHJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbiAocmVhY3Rpb24pIHtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHByb21pc2UuX2ggPT0gMikgb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gbWF5IHRocm93XG4gICAgICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSBydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgdW5oYW5kbGVkID0gaXNVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZiAodW5oYW5kbGVkKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICB2YXIgJCRyZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyICRpbmRleCA9IGluZGV4Kys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMSBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciByQXBwbHkgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuYXBwbHk7XG52YXIgZkFwcGx5ID0gRnVuY3Rpb24uYXBwbHk7XG4vLyBNUyBFZGdlIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByQXBwbHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgYXBwbHk6IGZ1bmN0aW9uIGFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KSB7XG4gICAgdmFyIFQgPSBhRnVuY3Rpb24odGFyZ2V0KTtcbiAgICB2YXIgTCA9IGFuT2JqZWN0KGFyZ3VtZW50c0xpc3QpO1xuICAgIHJldHVybiByQXBwbHkgPyByQXBwbHkoVCwgdGhpc0FyZ3VtZW50LCBMKSA6IGZBcHBseS5jYWxsKFQsIHRoaXNBcmd1bWVudCwgTCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4zIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcylcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbi8vIE1TIEVkZ2UgaGFzIGJyb2tlbiBSZWZsZWN0LmRlZmluZVByb3BlcnR5IC0gdGhyb3dpbmcgaW5zdGVhZCBvZiByZXR1cm5pbmcgZmFsc2VcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGRQLmYoe30sIDEsIHsgdmFsdWU6IDEgfSksIDEsIHsgdmFsdWU6IDIgfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICBwcm9wZXJ0eUtleSA9IHRvUHJpbWl0aXZlKHByb3BlcnR5S2V5LCB0cnVlKTtcbiAgICBhbk9iamVjdChhdHRyaWJ1dGVzKTtcbiAgICB0cnkge1xuICAgICAgZFAuZih0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI2LjEuNSBSZWZsZWN0LmVudW1lcmF0ZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgRW51bWVyYXRlID0gZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBhbk9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHZhciBrZXlzID0gdGhpcy5fayA9IFtdOyAgICAgIC8vIGtleXNcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gaXRlcmF0ZWQpIGtleXMucHVzaChrZXkpO1xufTtcbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoRW51bWVyYXRlLCAnT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IHRoaXM7XG4gIHZhciBrZXlzID0gdGhhdC5faztcbiAgdmFyIGtleTtcbiAgZG8ge1xuICAgIGlmICh0aGF0Ll9pID49IGtleXMubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH0gd2hpbGUgKCEoKGtleSA9IGtleXNbdGhhdC5faSsrXSkgaW4gdGhhdC5fdCkpO1xuICByZXR1cm4geyB2YWx1ZToga2V5LCBkb25lOiBmYWxzZSB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZW51bWVyYXRlOiBmdW5jdGlvbiBlbnVtZXJhdGUodGFyZ2V0KSB7XG4gICAgcmV0dXJuIG5ldyBFbnVtZXJhdGUodGFyZ2V0KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjcgUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgcmV0dXJuIGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS44IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnZXRQcm90byA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZih0YXJnZXQpIHtcbiAgICByZXR1cm4gZ2V0UHJvdG8oYW5PYmplY3QodGFyZ2V0KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS42IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgWywgcmVjZWl2ZXJdKVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjLCBwcm90bztcbiAgaWYgKGFuT2JqZWN0KHRhcmdldCkgPT09IHJlY2VpdmVyKSByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgaWYgKGRlc2MgPSBnT1BELmYodGFyZ2V0LCBwcm9wZXJ0eUtleSkpIHJldHVybiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICA/IGRlc2MudmFsdWVcbiAgICA6IGRlc2MuZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVzYy5nZXQuY2FsbChyZWNlaXZlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkgcmV0dXJuIGdldChwcm90bywgcHJvcGVydHlLZXksIHJlY2VpdmVyKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBnZXQ6IGdldCB9KTtcbiIsIi8vIDI2LjEuOSBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBoYXM6IGZ1bmN0aW9uIGhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgcmV0dXJuIHByb3BlcnR5S2V5IGluIHRhcmdldDtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjExIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IG93bktleXM6IHJlcXVpcmUoJy4vX293bi1rZXlzJykgfSk7XG4iLCIvLyAyNi4xLjEyIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRwcmV2ZW50RXh0ZW5zaW9ucyA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBwcmV2ZW50RXh0ZW5zaW9uczogZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICB0cnkge1xuICAgICAgaWYgKCRwcmV2ZW50RXh0ZW5zaW9ucykgJHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTQgUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzZXRQcm90byA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpO1xuXG5pZiAoc2V0UHJvdG8pICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgc2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pIHtcbiAgICBzZXRQcm90by5jaGVjayh0YXJnZXQsIHByb3RvKTtcbiAgICB0cnkge1xuICAgICAgc2V0UHJvdG8uc2V0KHRhcmdldCwgcHJvdG8pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcbnZhciBCYXNlID0gJFJlZ0V4cDtcbnZhciBwcm90byA9ICRSZWdFeHAucHJvdG90eXBlO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcbi8vIFwibmV3XCIgY3JlYXRlcyBhIG5ldyBvYmplY3QsIG9sZCB3ZWJraXQgYnVnZ3kgaGVyZVxudmFyIENPUlJFQ1RfTkVXID0gbmV3ICRSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAoIUNPUlJFQ1RfTkVXIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZTJbcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyldID0gZmFsc2U7XG4gIC8vIFJlZ0V4cCBjb25zdHJ1Y3RvciBjYW4gYWx0ZXIgZmxhZ3MgYW5kIElzUmVnRXhwIHdvcmtzIGNvcnJlY3Qgd2l0aCBAQG1hdGNoXG4gIHJldHVybiAkUmVnRXhwKHJlMSkgIT0gcmUxIHx8ICRSZWdFeHAocmUyKSA9PSByZTIgfHwgJFJlZ0V4cChyZTEsICdpJykgIT0gJy9hL2knO1xufSkpKSB7XG4gICRSZWdFeHAgPSBmdW5jdGlvbiBSZWdFeHAocCwgZikge1xuICAgIHZhciB0aVJFID0gdGhpcyBpbnN0YW5jZW9mICRSZWdFeHA7XG4gICAgdmFyIHBpUkUgPSBpc1JlZ0V4cChwKTtcbiAgICB2YXIgZmlVID0gZiA9PT0gdW5kZWZpbmVkO1xuICAgIHJldHVybiAhdGlSRSAmJiBwaVJFICYmIHAuY29uc3RydWN0b3IgPT09ICRSZWdFeHAgJiYgZmlVID8gcFxuICAgICAgOiBpbmhlcml0SWZSZXF1aXJlZChDT1JSRUNUX05FV1xuICAgICAgICA/IG5ldyBCYXNlKHBpUkUgJiYgIWZpVSA/IHAuc291cmNlIDogcCwgZilcbiAgICAgICAgOiBCYXNlKChwaVJFID0gcCBpbnN0YW5jZW9mICRSZWdFeHApID8gcC5zb3VyY2UgOiBwLCBwaVJFICYmIGZpVSA/ICRmbGFncy5jYWxsKHApIDogZilcbiAgICAgICwgdGlSRSA/IHRoaXMgOiBwcm90bywgJFJlZ0V4cCk7XG4gIH07XG4gIHZhciBwcm94eSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgaW4gJFJlZ0V4cCB8fCBkUCgkUmVnRXhwLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQmFzZVtrZXldOyB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAoaXQpIHsgQmFzZVtrZXldID0gaXQ7IH1cbiAgICB9KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZSksIGkgPSAwOyBrZXlzLmxlbmd0aCA+IGk7KSBwcm94eShrZXlzW2krK10pO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICRSZWdFeHA7XG4gICRSZWdFeHAucHJvdG90eXBlID0gcHJvdG87XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCAnUmVnRXhwJywgJFJlZ0V4cCk7XG59XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ1JlZ0V4cCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xucmVxdWlyZSgnLi9fZXhwb3J0Jykoe1xuICB0YXJnZXQ6ICdSZWdFeHAnLFxuICBwcm90bzogdHJ1ZSxcbiAgZm9yY2VkOiByZWdleHBFeGVjICE9PSAvLi8uZXhlY1xufSwge1xuICBleGVjOiByZWdleHBFeGVjXG59KTtcbiIsIi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzKClcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIC8uL2cuZmxhZ3MgIT0gJ2cnKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlcXVpcmUoJy4vX2ZsYWdzJylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnbWF0Y2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgTUFUQ0gsICRtYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkbWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTRVQgPSAnU2V0JztcblxuLy8gMjMuMiBTZXQgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4yLjMuMSBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBTRVQpLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4yIFN0cmluZy5wcm90b3R5cGUuYW5jaG9yKG5hbWUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdhbmNob3InLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYW5jaG9yKG5hbWUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICduYW1lJywgbmFtZSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjMgU3RyaW5nLnByb3RvdHlwZS5iaWcoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmlnJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJpZygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmlnJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNCBTdHJpbmcucHJvdG90eXBlLmJsaW5rKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJsaW5rKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdibGluaycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy42IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgoc2VhcmNoU3RyaW5nIFssIGVuZFBvc2l0aW9uXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBFTkRTX1dJVEggPSAnZW5kc1dpdGgnO1xudmFyICRlbmRzV2l0aCA9ICcnW0VORFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoRU5EU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIGVuZFBvc2l0aW9uID0gQGxlbmd0aCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIEVORFNfV0lUSCk7XG4gICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoYXQubGVuZ3RoKTtcbiAgICB2YXIgZW5kID0gZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IGxlbiA6IE1hdGgubWluKHRvTGVuZ3RoKGVuZFBvc2l0aW9uKSwgbGVuKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRlbmRzV2l0aFxuICAgICAgPyAkZW5kc1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNiBTdHJpbmcucHJvdG90eXBlLmZpeGVkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZpeGVkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZpeGVkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICd0dCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjcgU3RyaW5nLnByb3RvdHlwZS5mb250Y29sb3IoY29sb3IpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250Y29sb3InLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9udGNvbG9yKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnY29sb3InLCBjb2xvcik7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjggU3RyaW5nLnByb3RvdHlwZS5mb250c2l6ZShzaXplKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udHNpemUnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9udHNpemUoc2l6ZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ3NpemUnLCBzaXplKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcblxuLy8gbGVuZ3RoIHNob3VsZCBiZSAxLCBvbGQgRkYgcHJvYmxlbVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi4yIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGFMZW4gPiBpKSB7XG4gICAgICBjb2RlID0gK2FyZ3VtZW50c1tpKytdO1xuICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwZmZmZikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgcmVzLnB1c2goY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMCwgY29kZSAlIDB4NDAwICsgMHhkYzAwKVxuICAgICAgKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy45IFN0cmluZy5wcm90b3R5cGUuaXRhbGljcygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdpdGFsaWNzJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGl0YWxpY3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2knLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQoY291bnQpXG4gIHJlcGVhdDogcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjExIFN0cmluZy5wcm90b3R5cGUuc21hbGwoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc21hbGwnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc21hbGwoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3NtYWxsJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiLy8gMjEuMS4zLjE4IFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgWywgcG9zaXRpb24gXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbnZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgU1RBUlRTX1dJVEgpO1xuICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMS4zLjI1IFN0cmluZy5wcm90b3R5cGUudHJpbSgpXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltJywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAzKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIE1FVEEgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciB3a3NEZWZpbmUgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJyk7XG52YXIgZW51bUtleXMgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIF9jcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZ09QTkV4dCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpO1xudmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkR09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJyAmJiAhISRHT1BTLmY7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gICRHT1BTLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKSB7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBTeW1ib2w6ICRTeW1ib2wgfSk7XG5cbmZvciAodmFyIGVzNlN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspd2tzKGVzNlN5bWJvbHNbaisrXSk7XG5cbmZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tzRGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gJGZhaWxzKGZ1bmN0aW9uICgpIHsgJEdPUFMuZigxKTsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogRkFJTFNfT05fUFJJTUlUSVZFUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICByZXR1cm4gJEdPUFMuZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3R5cGVkJykuQUJWLCB7XG4gIERhdGFWaWV3OiByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKS5EYXRhVmlld1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59LCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBlYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKTtcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIFdFQUtfTUFQID0gJ1dlYWtNYXAnO1xudmFyIGdldFdlYWsgPSBtZXRhLmdldFdlYWs7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlO1xudmFyIEludGVybmFsTWFwO1xuXG52YXIgd3JhcHBlciA9IGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG52YXIgbWV0aG9kcyA9IHtcbiAgLy8gMjMuMy4zLjMgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSkuZ2V0KGtleSk7XG4gICAgICByZXR1cm4gZGF0YSA/IGRhdGFbdGhpcy5faV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICAvLyAyMy4zLjMuNSBXZWFrTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCksIGtleSwgdmFsdWUpO1xuICB9XG59O1xuXG4vLyAyMy4zIFdlYWtNYXAgT2JqZWN0c1xudmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4vLyBJRTExIFdlYWtNYXAgZnJvemVuIGtleXMgZml4XG5pZiAoTkFUSVZFX1dFQUtfTUFQICYmIElTX0lFMTEpIHtcbiAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwcm90byA9ICRXZWFrTWFwLnByb3RvdHlwZTtcbiAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgLy8gc3RvcmUgZnJvemVuIG9iamVjdHMgb24gaW50ZXJuYWwgd2Vha21hcCBzaGltXG4gICAgICBpZiAoaXNPYmplY3QoYSkgJiYgIWlzRXh0ZW5zaWJsZShhKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2YpIHRoaXMuX2YgPSBuZXcgSW50ZXJuYWxNYXAoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcbiAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAvLyBzdG9yZSBhbGwgdGhlIHJlc3Qgb24gbmF0aXZlIHdlYWttYXBcbiAgICAgIH0gcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuLCBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0TWFwJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0dGVuOiBmdW5jdGlvbiBmbGF0dGVuKC8qIGRlcHRoQXJnID0gMSAqLykge1xuICAgIHZhciBkZXB0aEFyZyA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIGRlcHRoQXJnID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoQXJnKSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdHRlbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnaW5jbHVkZXMnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yd2FsZHJvbi90YzM5LW5vdGVzL2Jsb2IvbWFzdGVyL2VzNi8yMDE0LTA5L3NlcHQtMjUubWQjNTEwLWdsb2JhbGFzYXAtZm9yLWVucXVldWluZy1hLW1pY3JvdGFza1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIHByb2Nlc3MgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wcm9jZXNzO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHtcbiAgYXNhcDogZnVuY3Rpb24gYXNhcChmbikge1xuICAgIHZhciBkb21haW4gPSBpc05vZGUgJiYgcHJvY2Vzcy5kb21haW47XG4gICAgbWljcm90YXNrKGRvbWFpbiA/IGRvbWFpbi5iaW5kKGZuKSA6IGZuKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL3Byb3Bvc2FsLWlzLWVycm9yXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0Vycm9yJywge1xuICBpc0Vycm9yOiBmdW5jdGlvbiBpc0Vycm9yKGl0KSB7XG4gICAgcmV0dXJuIGNvZihpdCkgPT09ICdFcnJvcic7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbGFtcDogZnVuY3Rpb24gY2xhbXAoeCwgbG93ZXIsIHVwcGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHVwcGVyLCBNYXRoLm1heChsb3dlciwgeCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgREVHX1BFUl9SQUQ6IE1hdGguUEkgLyAxODAgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIFJBRF9QRVJfREVHID0gMTgwIC8gTWF0aC5QSTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBkZWdyZWVzOiBmdW5jdGlvbiBkZWdyZWVzKHJhZGlhbnMpIHtcbiAgICByZXR1cm4gcmFkaWFucyAqIFJBRF9QRVJfREVHO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlhZGRoOiBmdW5jdGlvbiBpYWRkaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgKyAoeTEgPj4+IDApICsgKCgkeDAgJiAkeTAgfCAoJHgwIHwgJHkwKSAmIH4oJHgwICsgJHkwID4+PiAwKSkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlzdWJoOiBmdW5jdGlvbiBpc3ViaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgLSAoeTEgPj4+IDApIC0gKCh+JHgwICYgJHkwIHwgfigkeDAgXiAkeTApICYgJHgwIC0gJHkwID4+PiAwKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IFJBRF9QRVJfREVHOiAxODAgLyBNYXRoLlBJIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNjYWxlOiByZXF1aXJlKCcuL19tYXRoLXNjYWxlJykgfSk7XG4iLCIvLyBodHRwOi8vamZiYXN0aWVuLmdpdGh1Yi5pby9wYXBlcnMvTWF0aC5zaWduYml0Lmh0bWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbmJpdDogZnVuY3Rpb24gc2lnbmJpdCh4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpICE9IHggPyB4IDogeCA9PSAwID8gMSAvIHggPT0gSW5maW5pdHkgOiB4ID4gMDtcbn0gfSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB1bXVsaDogZnVuY3Rpb24gdW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+Pj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+Pj4gMTYpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjIgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZUdldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IGdldDogYUZ1bmN0aW9uKGdldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4zIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVTZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBzZXQ6IGFGdW5jdGlvbihzZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKGl0KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi40IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBHZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwR2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwR2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuZ2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi41IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBTZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwU2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwU2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuc2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemVucGFyc2luZy9lcy1vYnNlcnZhYmxlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBPQlNFUlZBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ29ic2VydmFibGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBSRVRVUk4gPSBmb3JPZi5SRVRVUk47XG5cbnZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZuID09IG51bGwgPyB1bmRlZmluZWQgOiBhRnVuY3Rpb24oZm4pO1xufTtcblxudmFyIGNsZWFudXBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHZhciBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jO1xuICBpZiAoY2xlYW51cCkge1xuICAgIHN1YnNjcmlwdGlvbi5fYyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwKCk7XG4gIH1cbn07XG5cbnZhciBzdWJzY3JpcHRpb25DbG9zZWQgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHJldHVybiBzdWJzY3JpcHRpb24uX28gPT09IHVuZGVmaW5lZDtcbn07XG5cbnZhciBjbG9zZVN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gIH1cbn07XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgYW5PYmplY3Qob2JzZXJ2ZXIpO1xuICB0aGlzLl9jID0gdW5kZWZpbmVkO1xuICB0aGlzLl9vID0gb2JzZXJ2ZXI7XG4gIG9ic2VydmVyID0gbmV3IFN1YnNjcmlwdGlvbk9ic2VydmVyKHRoaXMpO1xuICB0cnkge1xuICAgIHZhciBjbGVhbnVwID0gc3Vic2NyaWJlcihvYnNlcnZlcik7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IGNsZWFudXA7XG4gICAgaWYgKGNsZWFudXAgIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSBjbGVhbnVwID0gZnVuY3Rpb24gKCkgeyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgIGVsc2UgYUZ1bmN0aW9uKGNsZWFudXApO1xuICAgICAgdGhpcy5fYyA9IGNsZWFudXA7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgcmV0dXJuO1xuICB9IGlmIChzdWJzY3JpcHRpb25DbG9zZWQodGhpcykpIGNsZWFudXBTdWJzY3JpcHRpb24odGhpcyk7XG59O1xuXG5TdWJzY3JpcHRpb24ucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkgeyBjbG9zZVN1YnNjcmlwdGlvbih0aGlzKTsgfVxufSk7XG5cbnZhciBTdWJzY3JpcHRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdGhpcy5fcyA9IHN1YnNjcmlwdGlvbjtcbn07XG5cblN1YnNjcmlwdGlvbk9ic2VydmVyLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIG5leHQ6IGZ1bmN0aW9uIG5leHQodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5uZXh0KTtcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcih2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmIChzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkgdGhyb3cgdmFsdWU7XG4gICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuZXJyb3IpO1xuICAgICAgaWYgKCFtKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHZhbHVlID0gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmNvbXBsZXRlKTtcbiAgICAgICAgdmFsdWUgPSBtID8gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnZhciAkT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlcikge1xuICBhbkluc3RhbmNlKHRoaXMsICRPYnNlcnZhYmxlLCAnT2JzZXJ2YWJsZScsICdfZicpLl9mID0gYUZ1bmN0aW9uKHN1YnNjcmliZXIpO1xufTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUucHJvdG90eXBlLCB7XG4gIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24ob2JzZXJ2ZXIsIHRoaXMuX2YpO1xuICB9LFxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgKGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGF0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59KTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUsIHtcbiAgZnJvbTogZnVuY3Rpb24gZnJvbSh4KSB7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZTtcbiAgICB2YXIgbWV0aG9kID0gZ2V0TWV0aG9kKGFuT2JqZWN0KHgpW09CU0VSVkFCTEVdKTtcbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICB2YXIgb2JzZXJ2YWJsZSA9IGFuT2JqZWN0KG1ldGhvZC5jYWxsKHgpKTtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDID8gb2JzZXJ2YWJsZSA6IG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGZvck9mKHgsIGZhbHNlLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdCk7XG4gICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm4gUkVUVVJOO1xuICAgICAgICAgICAgfSkgPT09IFJFVFVSTikgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBlO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9LFxuICBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBpdGVtcyA9IG5ldyBBcnJheShsKTsgaSA8IGw7KSBpdGVtc1tpXSA9IGFyZ3VtZW50c1tpKytdO1xuICAgIHJldHVybiBuZXcgKHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlKShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW1zLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2pdKTtcbiAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9XG59KTtcblxuaGlkZSgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIE9CU0VSVkFCTEUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBPYnNlcnZhYmxlOiAkT2JzZXJ2YWJsZSB9KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnT2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1maW5hbGx5XG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHsgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIG9uRmluYWxseSA9PSAnZnVuY3Rpb24nO1xuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHksXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICB9IDogb25GaW5hbGx5XG4gICk7XG59IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gIChyZXN1bHQuZSA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBtZXRhZGF0YS5tYXA7XG52YXIgc3RvcmUgPSBtZXRhZGF0YS5zdG9yZTtcblxubWV0YWRhdGEuZXhwKHsgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xufSB9KTtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlIYXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiB0cnVlO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogZmFsc2U7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNNZXRhZGF0YTogZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNPd25NZXRhZGF0YTogZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyICRtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9NZXRhS2V5ID0gJG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gJG1ldGFkYXRhLnNldDtcblxuJG1ldGFkYXRhLmV4cCh7IG1ldGFkYXRhOiBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShcbiAgICAgIG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLFxuICAgICAgKHRhcmdldEtleSAhPT0gdW5kZWZpbmVkID8gYW5PYmplY3QgOiBhRnVuY3Rpb24pKHRhcmdldCksXG4gICAgICB0b01ldGFLZXkodGFyZ2V0S2V5KVxuICAgICk7XG4gIH07XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIGF0OiBmdW5jdGlvbiBhdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZFN0YXJ0OiBmdW5jdGlvbiBwYWRTdGFydChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnb2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N5c3RlbScsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iLCIvLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuIiwicmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNlYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jYnJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2x6MzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5mcm91bmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5oeXBvdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmltdWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxMCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRydW5jJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJhdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ibGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdHJpa2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1YicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUubm93Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5qb2luJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb21lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmNsYW1wJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaWFkZGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pc3ViaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmltdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC51bXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UudHJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFzYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuaW1tZWRpYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL21vZHVsZXMvX2NvcmUnKTtcbiIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXBvbHlmaWxsL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZyb20taXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NsYXNzb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24tdG8tanNvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RlZmluZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19lbnVtLWJ1Zy1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMtaXMtcmVnZXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmxhdHRlbi1pbnRvLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mdW5jdGlvbi10by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19oaWRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2h0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbnZva2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1hcnJheS1pdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1zdGVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtZXhwbTEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1mcm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLXNjYWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21pY3JvdGFzay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWRwcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZm9yY2VkLXBhbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi1leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdwby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtcGllLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX293bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWZsb2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wZXJmb3JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZXBsYWNlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1jb2xsZWN0aW9uLWZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC1zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXBhZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcmVwZWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy13cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWluZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC1idWZmZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdWlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VzZXItYWdlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MtZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1leHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmpvaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hc2luaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmNsejMyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY29zaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2luaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC50cnVuYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNlYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wYXJzZS1pbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ibGluay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnJhdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3ltYm9sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LndlYWstc2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC50by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pYWRkaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmltdWxoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC51bXVsaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC5vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcuYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudGltZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdI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VUFBVTtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsV0FBVztBQUNuQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLFdBQVc7QUFDbkI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHlCQUF5QixtQkFBbUIsdUJBQXVCLEVBQUUsRUFBRTtBQUN2RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixXQUFXO0FBQzVCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7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MEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsa0lBQWtEO0FBQzFELG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsd0hBQTZDO0FBQ3JELG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsNEVBQXVCO0FBQy9CLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0hBQTBDO0FBQ2xELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsd0hBQTZDO0FBQ3JELG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0VBQW9CO0FBQzVCLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLGlCQUFpQixtQkFBTyxDQUFDLGdFQUFpQjs7Ozs7Ozs7Ozs7O0FDck0xQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxLQUFLO0FBQ0wsY0FBYztBQUNkO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQy90QkE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7O0FBRTVDIiwiZmlsZSI6Ii4vSlMvcG9seWZpbGwuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzXCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL3NoaW1cIik7XG5cbnJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWVcIik7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGVcIik7XG5cbmlmIChnbG9iYWwuX2JhYmVsUG9seWZpbGwpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgaW5zdGFuY2Ugb2YgYmFiZWwtcG9seWZpbGwgaXMgYWxsb3dlZFwiKTtcbn1cbmdsb2JhbC5fYmFiZWxQb2x5ZmlsbCA9IHRydWU7XG5cbnZhciBERUZJTkVfUFJPUEVSVFkgPSBcImRlZmluZVByb3BlcnR5XCI7XG5mdW5jdGlvbiBkZWZpbmUoTywga2V5LCB2YWx1ZSkge1xuICBPW2tleV0gfHwgT2JqZWN0W0RFRklORV9QUk9QRVJUWV0oTywga2V5LCB7XG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkTGVmdFwiLCBcIlwiLnBhZFN0YXJ0KTtcbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZFJpZ2h0XCIsIFwiXCIucGFkRW5kKTtcblxuXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzLGluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXMsam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIi5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIFtdW2tleV0gJiYgZGVmaW5lKEFycmF5LCBrZXksIEZ1bmN0aW9uLmNhbGwuYmluZChbXVtrZXldKSk7XG59KTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxudmFyIEZPUkNFRCA9ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAn8KCutycuYXQoMCkgIT09ICfwoK63Jztcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/front/public/JS/questionnaire.app.js b/front/public/JS/questionnaire.app.js index 0b0b330..940fdb0 100644 --- a/front/public/JS/questionnaire.app.js +++ b/front/public/JS/questionnaire.app.js @@ -934,10 +934,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tools/matomo.js */ "./src/tools/matomo.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DU FORMULAIRE PERMETTANT D'AFFICHER ET RÉPONDRE À UN QUIZ /// Il n'est pas nécessaire d'être connecté pour répondre au quiz et voir son résultat. /// Mais si pas connecté, on propose à l'internaute de se connecter ou de créer un compte pour sauvegarder son résultat. @@ -945,10 +941,10 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Si il est connecté, l'enregistrement de son résultat se fait automatiquement côté serveur et ses éventuels précédents résultats sont affichés. // Fichier de configuration tirés du backend : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); @@ -959,80 +955,55 @@ var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + lang + "/answer"), - noPreviousAnswer = _require.noPreviousAnswer, - previousAnswersLine = _require.previousAnswersLine, - previousAnswersStats = _require.previousAnswersStats, - previousAnswersTitle = _require.previousAnswersTitle, - responseSavedError = _require.responseSavedError, - wantToSaveResponses = _require.wantToSaveResponses; +const { + noPreviousAnswer, + previousAnswersLine, + previousAnswersStats, + previousAnswersTitle, + responseSavedError, + wantToSaveResponses +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + lang + "/answer"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require2.serverError; // Principaux éléments du DOM manipulés : +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); // Principaux éléments du DOM manipulés : -var myForm = document.getElementById("questionnaire"); -var divResponse = document.getElementById("response"); -var btnShow = document.getElementById("showQuestionnaire"); -var btnSubmit = document.getElementById("checkResponses"); -var explanationsTitle = document.getElementById("explanationsTitle"); -var explanationsContent = document.getElementById("explanationsContent"); -var isConnected, user; +const myForm = document.getElementById("questionnaire"); +const divResponse = document.getElementById("response"); +const btnShow = document.getElementById("showQuestionnaire"); +const btnSubmit = document.getElementById("checkResponses"); +const explanationsTitle = document.getElementById("explanationsTitle"); +const explanationsContent = document.getElementById("explanationsContent"); +let isConnected, user; -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - btnShow.style.display = "inline"; // bouton caché si JS inactif, car JS nécessaire pour vérifier les réponses +const initialise = async () => { + try { + btnShow.style.display = "inline"; // bouton caché si JS inactif, car JS nécessaire pour vérifier les réponses - _context.next = 4; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_9__["checkSession"])(["user"]); + isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_9__["checkSession"])(["user"]); // "user" car seuls les utilisateurs de base peuvent enregistrer leurs réponses aux quizs + // Si l'utilisateur est connecté et a déjà répondu à ce quiz, on affiche ses précédentes réponses à la place du texte servant à expliquer le topo aux nouveaux - case 4: - isConnected = _context.sent; + if (isConnected) { + user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_5__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_4__["updateAccountLink"])(user.status, configTemplate); // lien vers le compte adapté pour les utilisateurs connectés - // "user" car seuls les utilisateurs de base peuvent enregistrer leurs réponses aux quizs - // Si l'utilisateur est connecté et a déjà répondu à ce quiz, on affiche ses précédentes réponses à la place du texte servant à expliquer le topo aux nouveaux - if (isConnected) { - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_5__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_4__["updateAccountLink"])(user.status, configTemplate); // lien vers le compte adapté pour les utilisateurs connectés - - checkPreviousResponses(user); - } else Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_8__["loadMatomo"])(); - - _context.next = 11; - break; - - case 8: - _context.prev = 8; - _context.t0 = _context["catch"](0); - console.error(_context.t0); - - case 11: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 8]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + checkPreviousResponses(user); + } else Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_8__["loadMatomo"])(); + } catch (e) { + console.error(e); + } +}; initialise(); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_4__["helloDev"])(); // Affichage du questionnaire quand l'utilisateur clique sur le bouton ou si l'id du formulaire est passée par l'url. // Déclenche en même temps le chronomètre mesurant la durée de la réponse aux questions. -var showQuestionnaire = function showQuestionnaire() { +const showQuestionnaire = () => { chronoBegin = Date.now(); myForm.style.display = "block"; btnShow.style.display = "none"; - var here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview". + const here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview". if (window.location.hash !== "") { window.location.hash = ""; // ! le "#" reste @@ -1041,7 +1012,7 @@ var showQuestionnaire = function showQuestionnaire() { } else window.location.assign(here + "#questionnaire"); }; -var chronoBegin = 0; +let chronoBegin = 0; btnShow.addEventListener("click", function (e) { try { e.preventDefault(); @@ -1054,7 +1025,7 @@ btnShow.addEventListener("click", function (e) { if (location.hash != "" && location.hash === "#questionnaire") showQuestionnaire(); // Traitement de l'envoi de la réponse de l'utilisateur : -var answer = {}; +let answer = {}; myForm.addEventListener("submit", function (e) { try { e.preventDefault(); @@ -1062,18 +1033,18 @@ myForm.addEventListener("submit", function (e) { divResponse.innerHTML = ""; // supprime les éventuels messages déjà affichés - var userResponses = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_6__["getDatasFromInputs"])(myForm); + const userResponses = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_6__["getDatasFromInputs"])(myForm); answer.duration = Math.round((Date.now() - chronoBegin) / 1000); answer.nbQuestions = 0; answer.nbCorrectAnswers = 0; answer.QuestionnaireId = document.getElementById("questionnaireId").value; // Les réponses sont regroupées par question, donc quand idQuestion change, on connaît le résultat pour la question précédente. // Pour qu'une réponse soit bonne, il faut cocher toutes les bonnes réponses (si QCM) à la question ET cocher aucune des mauvaises. - var idChoice, + let idChoice, idQuestion = "", goodResponse = false; - for (var item in userResponses) { + for (let item in userResponses) { if (item.startsWith("isCorrect_response_")) // = Nouvelle réponse possible. { idChoice = item.substring(item.lastIndexOf("_") + 1); // si on change de queston @@ -1104,16 +1075,16 @@ myForm.addEventListener("submit", function (e) { if (goodResponse) answer.nbCorrectAnswers++; // Affichage du résultat, suivant si l'utilisateur est connecté ou pas et son score : - var getOuput = Object(_tools_answers_js__WEBPACK_IMPORTED_MODULE_2__["checkAnswerOuput"])(answer); + let getOuput = Object(_tools_answers_js__WEBPACK_IMPORTED_MODULE_2__["checkAnswerOuput"])(answer); if (isConnected) { // Si l'utilisateur est connecté, on enregistre son résultat sur le serveur. - var xhrSaveAnswer = new XMLHttpRequest(); + const xhrSaveAnswer = new XMLHttpRequest(); xhrSaveAnswer.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_1__["questionnaireRoutes"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_1__["saveAnswersRoute"]); xhrSaveAnswer.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var xhrResponse = JSON.parse(this.responseText); + let xhrResponse = JSON.parse(this.responseText); if (this.status === 201 && xhrResponse.message) { getOuput += "
    " + xhrResponse.message.replace("#URL", configTemplate.userHomePage); @@ -1122,7 +1093,7 @@ myForm.addEventListener("submit", function (e) { window.location.hash = ""; - var here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... + const here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... window.location.assign(here + "explanations"); } @@ -1144,15 +1115,15 @@ myForm.addEventListener("submit", function (e) { window.location.hash = ""; - var here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... + const here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... window.location.assign(here + "response"); } // + affichage des textes d'explications pour chaque question - var explanations = document.querySelectorAll(".help"); + const explanations = document.querySelectorAll(".help"); - for (var i in explanations) { + for (let i in explanations) { if (explanations[i].style != undefined) // sinon, la console affiche une erreur "TypeError: explanations[i].style is undefined", bien que tout fonctionne (?) explanations[i].style.display = "block"; } @@ -1163,26 +1134,26 @@ myForm.addEventListener("submit", function (e) { }); // Fonction vérifiant les précédentes réponses de l'utilisateur // Utile si connecté lors du premier chargement de la page, puis après une nouvelle réponse -var checkPreviousResponses = function checkPreviousResponses(user) { - var xhrPreviousRes = new XMLHttpRequest(); +const checkPreviousResponses = user => { + const xhrPreviousRes = new XMLHttpRequest(); xhrPreviousRes.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_1__["questionnaireRoutes"] + _config_questionnaires_js__WEBPACK_IMPORTED_MODULE_1__["getPreviousAnswers"] + user.id + "/" + document.getElementById("questionnaireId").value); xhrPreviousRes.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 200) { - var nbResponses = response.length; - var previousAnswersContent = ""; + const nbResponses = response.length; + let previousAnswersContent = ""; Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(explanationsTitle, "span", previousAnswersTitle.replace("#NOM", user.name)); if (nbResponses !== 0) { - var totNbQuestions = 0, + let totNbQuestions = 0, totNbCorrectAnswers = 0, totDuration = 0, mapLineContent; - for (var i in response) { + for (let i in response) { totNbQuestions += response[i].nbQuestions; // ! on ne peut se baser sur la version actuelle du quiz, car le nombre de questions a pu évoluer. totNbCorrectAnswers += response[i].nbCorrectAnswers; @@ -1230,30 +1201,30 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_1__); -var configFrontEnd = __webpack_require__(/*! ../config/general */ "./src/config/general.js"); +const configFrontEnd = __webpack_require__(/*! ../config/general */ "./src/config/general.js"); -var txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + configFrontEnd.lang + "/answer"); // Enregistrement côté client du dernier résultat à un quiz en attendant d'être connecté +const txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + configFrontEnd.lang + "/answer"); // Enregistrement côté client du dernier résultat à un quiz en attendant d'être connecté -var saveAnswer = function saveAnswer(answer) { +const saveAnswer = answer => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.GroupId))) { Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("lastAnswer", answer); return true; } else return false; }; // Retourne un texte suivant le nombre de bonnes réponses -var checkAnswerOuput = function checkAnswerOuput(answer) { +const checkAnswerOuput = answer => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions)) { - var ratio = answer.nbCorrectAnswers / answer.nbQuestions; - var mapObj = { + const ratio = answer.nbCorrectAnswers / answer.nbQuestions; + const mapObj = { DURATION: answer.duration, NBCORRECTANSWERS: answer.nbCorrectAnswers, NBQUESTIONS: answer.nbQuestions }; - var output = ""; + let output = ""; if (ratio < 0.4) output = Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["replaceAll"])(txt.checkResponsesOuputFail, mapObj);else if (ratio < 0.8) output = Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["replaceAll"])(txt.checkResponsesOuputMedium, mapObj);else output = Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["replaceAll"])(txt.checkResponsesOuputSuccess, mapObj); if (output) return output;else return ""; } else return ""; @@ -1275,14 +1246,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1300,32 +1270,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1349,13 +1308,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1376,25 +1335,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1402,49 +1353,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1465,7 +1394,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__); // Fonction chargeant le code matomo -var loadMatomo = function loadMatomo() { +const loadMatomo = () => { // chargement de matomo var _paq = window._paq = window._paq || []; //ajout cnil : @@ -1531,27 +1460,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1560,11 +1485,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1578,96 +1503,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1676,4 +1573,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvYW5zd2VyLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9ubmFpcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Fuc3dlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJjaGVja1Jlc3BvbnNlc091cHV0RmFpbCIsImNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0iLCJjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyIsIm5lZWRJbnRlZ2VyTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWRJbnRlZ2VyTnVtYmVyU2Vjb25kZXNSZXNwb25zZSIsIm5lZWRJbnRlZ2VyTnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE1pbk51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWROdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE1heE51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWRNaW5OdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIiwibm9QcmV2aW91c0Fuc3dlciIsInByZXZpb3VzQW5zd2Vyc0xpbmUiLCJwcmV2aW91c0Fuc3dlcnNTdGF0cyIsInByZXZpb3VzQW5zd2Vyc1RpdGxlIiwicmVzcG9uc2VTYXZlZEVycm9yIiwicmVzcG9uc2VTYXZlZE1lc3NhZ2UiLCJzdGF0c1VzZXIiLCJ3YW50VG9TYXZlUmVzcG9uc2VzIiwiYWRkQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJiYWRVcmwiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuU2hvd09uV2ViU2l0ZSIsImRlbGV0ZUJ0blR4dCIsImRlbGV0ZUZhaWxNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aENyb24iLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aFRva2VuIiwibmVlZGVkUGFyYW1zIiwibmV4dFBhZ2UiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJub3RWYWxpZEZvcm1hdCIsInByZXZpb3VzUGFnZSIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzY3JpcHRUaW1pbmdJbmZvIiwic3RhdHNBZG1pbiIsInN1YnNjcmlwdGlvbkNhbGwiLCJ1cGRhdGVCdG5UeHQiLCJ1cGRhdGVPa01lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJ1c2Vyc0dldENvbmZpZ1VybCIsImNvbmZpZ1RlbXBsYXRlIiwibXlGb3JtIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdlJlc3BvbnNlIiwiYnRuU2hvdyIsImJ0blN1Ym1pdCIsImV4cGxhbmF0aW9uc1RpdGxlIiwiZXhwbGFuYXRpb25zQ29udGVudCIsImlzQ29ubmVjdGVkIiwidXNlciIsImluaXRpYWxpc2UiLCJzdHlsZSIsImRpc3BsYXkiLCJjaGVja1Nlc3Npb24iLCJnZXRMb2NhbHkiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsImNoZWNrUHJldmlvdXNSZXNwb25zZXMiLCJsb2FkTWF0b21vIiwiY29uc29sZSIsImVycm9yIiwiaGVsbG9EZXYiLCJzaG93UXVlc3Rpb25uYWlyZSIsImNocm9ub0JlZ2luIiwibm93IiwiaGVyZSIsIndpbmRvdyIsImxvY2F0aW9uIiwiaGFzaCIsImFzc2lnbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJhZGRFbGVtZW50IiwiYW5zd2VyIiwiaW5uZXJIVE1MIiwidXNlclJlc3BvbnNlcyIsImdldERhdGFzRnJvbUlucHV0cyIsImR1cmF0aW9uIiwicm91bmQiLCJuYlF1ZXN0aW9ucyIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJpZENob2ljZSIsImlkUXVlc3Rpb24iLCJnb29kUmVzcG9uc2UiLCJpdGVtIiwic3RhcnRzV2l0aCIsImxhc3RJbmRleE9mIiwicGFyZW50Tm9kZSIsImNsYXNzTGlzdCIsImFkZCIsImdldE91cHV0IiwiY2hlY2tBbnN3ZXJPdXB1dCIsInhoclNhdmVBbnN3ZXIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInhoclJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwibWVzc2FnZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJzZW5kIiwic3RyaW5naWZ5Iiwic2F2ZUFuc3dlciIsInF1ZXJ5U2VsZWN0b3IiLCJleHBsYW5hdGlvbnMiLCJxdWVyeVNlbGVjdG9yQWxsIiwieGhyUHJldmlvdXNSZXMiLCJyZXNwb25zZSIsIm5iUmVzcG9uc2VzIiwicHJldmlvdXNBbnN3ZXJzQ29udGVudCIsInRvdE5iUXVlc3Rpb25zIiwidG90TmJDb3JyZWN0QW5zd2VycyIsInRvdER1cmF0aW9uIiwibWFwTGluZUNvbnRlbnQiLCJEQVRFQU5TV0VSIiwiZGF0ZUZvcm1hdCIsImNyZWF0ZWRBdCIsIk5CQ09SUkVDVEFOU1dFUlMiLCJOQlFVRVNUSU9OUyIsIkFWR0RVUkFUSU9OIiwicmVwbGFjZUFsbCIsIkFWR0NPUlJFQ1RBTlNXRVJTIiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJHcm91cElkIiwic2F2ZUxvY2FseSIsInJhdGlvIiwiRFVSQVRJT04iLCJvdXRwdXQiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiaW5wdXRzQ29uZiIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImRhdGFzIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImVudHJpZXMiLCJlbnRyaWUiLCJlbXB5Rm9ybSIsInR5cGUiLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwiX3BhcSIsInB1c2giLCJzZWxmIiwiZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCIsIm5vd1RzIiwiZ2V0VGltZSIsInZpc2l0b3JJbmZvIiwiZ2V0VmlzaXRvckluZm8iLCJjcmVhdGVUcyIsInBhcnNlSW50IiwiY29va2llVGltZW91dCIsIm9yaWdpbmFsVGltZW91dCIsInNldFZpc2l0b3JDb29raWVUaW1lb3V0IiwidSIsImQiLCJnIiwicyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYXN5bmMiLCJzcmMiLCJpbnNlcnRCZWZvcmUiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIiwib25lcnJvciIsInN0YXR1c1RleHQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLG1DQUFELENBQXJCOztBQUNBLElBQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQyxxREFBRCxDQUE5Qjs7QUFFQUUsTUFBTSxDQUFDQyxPQUFQO0FBRUlDLFFBQU0sRUFBRSwyQkFGWjtBQUdJQyxTQUFPLEVBQUUsdUJBSGI7QUFJSUMsV0FBUyxFQUFFLFNBSmY7QUFLSUMsWUFBVSxFQUFFLG1CQUxoQjtBQU1JQyxZQUFVLEVBQUUsbUJBTmhCO0FBT0lDLGFBQVcsRUFBRSx1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LElBQUo7QUFDSDtBQUNKO0FBQ0osYUF0RU0sQ0FGaUI7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBWnhELFlBQVk7QUFBQTtBQUFBO0FBQUEsR0FBbEIsQyxDQTBFUDs7QUFDQSxJQUFNOEosWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ04sY0FBRCxFQUFpQnJHLE9BQWpCLEVBQTBCc0csU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUM5UCwyREFBTyxDQUFDd0osT0FBRCxDQUFYLEVBQ0k4QixvRUFBVSxDQUFDLFNBQUQsRUFBWTlCLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ3hKLDJEQUFPLENBQUM4UCxTQUFELENBQVgsRUFDSXhFLG9FQUFVLENBQUMsS0FBRCxFQUFRd0UsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDOVAsMkRBQU8sQ0FBQzZQLGNBQUQsQ0FBWCxFQUNJM0ksTUFBTSxDQUFDQyxRQUFQLENBQWdCRSxNQUFoQixDQUF1QndJLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvcXVlc3Rpb25uYWlyZS5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9xdWVzdGlvbm5haXJlLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIi8vIFNpIG5vbiB1dGlsaXPDqSwgc3VwcHJpbWVyIGwnYXBwZWwgZGVzIEpTIGZyb250LWVuZCBwdWlzIHJlY29tcGlsZXIuXG4vLyBSZXZvaXIgY29tbWVudCByw6lvcmdhbmlzZXIgY2VsYSBzb3VzLWZvcm1lIGRlIG1vZHVsZSBpbmTDqXBlbmRhbnQuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gU3RhdHMgTWF0b21vIDpcbiAgICBtYXRvbW86IHsgdXJsOiBcImh0dHBzOi8vc3RhdHMubGUtZmFiLWxhYi5jb20vXCIsIHNpdGVJZDogXCI1XCIgfSxcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvYW5zd2VyXCI6IFwiLi4vbGFuZy9mci9hbnN3ZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9hbnN3ZXIkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0RmFpbCA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogPHU+PGI+TkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMgcXVlc3Rpb25zPC9iPjwvdT4uIEMnZXN0IGNlcnRhaW4sIHZvdXMgZmVyZXogbWlldXggbGEgcHJvY2hhaW5lIGZvaXMgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0gOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IDx1PjxiPk5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TIHF1ZXN0aW9uczwvYj48L3U+LiBDJ2VzdCBwYXMgbWFsIGR1IHRvdXQgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRTdWNjZXNzIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiA8dT48Yj5OQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUyBxdWVzdGlvbnM8L2I+PC91Pi4gQnJhdm8gISBSaWVuIG5lIHZvdXMgw6ljaGFwcGUgIVwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyU2Vjb25kZXNSZXNwb25zZSA6IFwiTGEgZHVyw6llIGRlIGxhIHLDqXBvbnNlIGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllciBkZSBzZWNvbmRlcy5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IG5lIHBldXQgw6p0cmUgYXVzc2kgw6lsZXbDqS5cIixcbiAgICBuZWVkTWluTnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGluZsOpcmlldXIgw6AgMS5cIixcbiAgICBuZWVkTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgZG9pdCDDqnRyZSBmb3VybmkuXCIsXG4gICAgbmVlZE51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgZG9pdCDDqnRyZSBmb3VybmkuXCIsXG4gICAgbmVlZE1heE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIG5lIHBldXQgw6p0cmUgc3Vww6lyaWV1ciBhdSBub21icmUgZGUgcXVlc3Rpb25zLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIG7DqWdhdGlmLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIDogXCJMYSBkdXLDqWUgZGUgbGEgcsOpcG9uc2UgbmUgcGV1dCDDqnRyZSBuw6lnYXRpdmUuXCIsXG4gICAgbm9QcmV2aW91c0Fuc3dlcjogXCJPbiBkaXJhaXQgcXVlIGMnZXN0IGxhIHByZW1pw6hyZSBmb2lzIHF1ZSB2b3VzIHLDqXBvbmRleiDDoCBjZSBxdWl6LiBCb25uZSBsZWN0dXJlICFcIixcbiAgICBwcmV2aW91c0Fuc3dlcnNMaW5lOiBcIkxlIERBVEVBTlNXRVIsIHZvdXMgYXZleiByw6lwb25kdSBjb3JyZWN0ZW1lbnQgw6AgTkJDT1JSRUNUQU5TV0VSUyBxdWVzdGlvbnMgc3VyIE5CUVVFU1RJT05TIGVuIEFWR0RVUkFUSU9OIHNlY29uZGVzLlwiLFxuICAgIHByZXZpb3VzQW5zd2Vyc1N0YXRzOiBcIkVuIG1veWVubmUsIHZvdXMgYXZleiByw6lwb25kdSDDoCBjZSBxdWl6IGVuIEFWR0RVUkFUSU9OIHNlY29uZGVzLCBlbiBheWFudCA8Yj5BVkdDT1JSRUNUQU5TV0VSUyAlIGRlIGJvbm5lcyByw6lwb25zZXM8L2I+LlwiLFxuICAgIHByZXZpb3VzQW5zd2Vyc1RpdGxlOiBcIkJvbmpvdXIgI05PTSwgdm9pY2kgdm9zIHByw6ljw6lkZW50cyByw6lzdWx0YXRzIMOgIGNlIHF1aXpcIixcbiAgICByZXNwb25zZVNhdmVkRXJyb3IgOiBcIkNlcGVuZGFudCB1bmUgZXJyZXVyIGEgw6l0w6kgcmVuY29udHLDqWUgZHVyYW50IGwnZW5yZWdpc3RyZW1lbnQgZGUgdm90cmUgcsOpc3VsdGF0LiA8YSBocmVmPScvI1VSTCc+QWNjw6hkZXIgw6AgdG91cyB2b3MgcXVpenM8L2E+LlwiLFxuICAgIHJlc3BvbnNlU2F2ZWRNZXNzYWdlIDogXCJWb3RyZSByw6lzdWx0YXQgYSDDqXTDqSBlbnJlZ2lzdHLDqS4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICBzdGF0c1VzZXI6IFwiVm91cyBhdmV6IGVucmVnaXN0csOpIDxiPk5CQU5TV0VSUyByw6lwb25zZVMxIMOgIE5CUVVFU1RJT05OQUlSRVMgcXVpelMyIGRpZmbDqXJlbnRTMzwvYj4gc3VyIGxlcyBOQlRPVFFVRVNUSU9OTkFJUkVTIHByb3Bvc8OpUzQgcGFyIGxlIHNpdGUuPGJyPkVuIG1veWVubmUsIHZvdXMgYXZleiBtaXMgQVZHRFVSQVRJT04gc2Vjb25kZXMgw6AgcsOpcG9uZHJlIGV0IGF2ZXogPGI+Y29ycmVjdGVtZW50IHLDqXBvbmR1IMOgIEFWR0NPUlJFQ1RBTlNXRVJTICUgZGVzIHF1ZXN0aW9uczwvYj4uXCIsXG4gICAgd2FudFRvU2F2ZVJlc3BvbnNlczogXCJTaSB2b3VzIGxlIHNvdWhhaXRleiwgdm91cyBwb3V2ZXogPHU+PGI+c2F1dmVnYXJkZXIgdm90cmUgcsOpc3VsdGF0PC9iPjwvdT4gZW4gY3LDqWFudCB2b3RyZSBjb21wdGUgY2ktZGVzc291cy4gQ2VsYSB2b3VzIHBlcm1ldHRyYSBhdXNzaSBkZSA8dT48Yj5yZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIFxcXCJncmFpbmVzIGRlIGN1bHR1cmVcXFwiPC9iPjwvdT4gZGlyZWN0ZW1lbnQgc3VyIHZvdHJlIGUtbWFpbC5cIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIuKAplwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxuXG4gICAgLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4gICAgLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG4gICAgc3RhdGljIGdldFBhc3N3b3JkIChuYkNhck1pbiwgbmJDYXJNYXgpXG4gICAge1xuICAgICAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgICAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgICAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgICAgICB9XG4gICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICByZXR1cm4gcGFzc3dvcmQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBsaWVucyBkZSBsJ2ludGVyZmFjZVxuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9uc1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIsIHRpdGxlOlwiQWNjw6lkZXIgb3UgY3LDqWV6IHZvdHJlIGNvbXB0ZSBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiLCB0aXRsZTpcIkVuIHNhdm9pciArIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiLCB0aXRsZTpcIlBhZ2UgZCdhY2N1ZWlsXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkxlIGJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiwgdGl0bGU6XCJRdWkgYSBjcsOpw6kgV2lraUxlcm5pID8gUXVlbHMgc29udCB2b3MgZHJvaXRzID9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiLCB0aXRsZTpcIlZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZTogXCJhZG1pbi5odG1sXCIsXG4gICAgY2d1UGFnZTogXCJDR1YtQ0dVLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLCAgICBcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2VUeHQgOiBcIk1hIHBhZ2UgZCdhY2N1ZWlsLlwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgLyogVGV4dGVzIChnw6luw6lyYWwpICovXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbiAgICBsaWNlbmNlVHh0OiBcIkBjb3B5bGVmdCBMZSBjb250ZW51IGRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgP1xcXCI+ZXN0IGxpYnJlPC9hPiBldCB2b3VzIGVzdCBvZmZlcnQgc2FucyBwdWJsaWNpdMOpLiBWb3VzIHBvdXZleiA8YSBocmVmPVxcXCIvcGFydGljaXBlci1maW5hbmNlbWVudC5odG1sXFxcIiB0aXRsZT1cXFwiRmluYW5jZW1lbnQgcGFydGljaXBhdGlmIGF2ZWMgY29udHJlLXBhcnRpZXNcXFwiPnBhcnRpY2lwZXIgw6Agc29uIGZpbmFuY2VtZW50IGVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgLyogUGFnZSBkJ2FjY3VlaWwgKi9cbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiPGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+Ljxicj5Wb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzLCBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLjxicj5EZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgPGI+ZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgY3VsdHVyZSBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBqYXJkaW48L2I+LlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIjxiPlBhcyBkZSBmYWl0cyBhbHRlcm5hdGlmczwvYj4sIHRvdXMgbGVzIGNvbnRlbnVzIHNvbnQgPGI+c291cmPDqXMgcGFyIGRlcyBhcnRpY2xlcyBXaWtpcMOpZGlhPC9iPi48YnI+RXQgdG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwdWJsacOpIHN1ciBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzIHN1ciBjZSBzdWpldFxcXCI+c29udCBwYXJ0YWfDqXMgc291cyBsaWNlbmNlcyBsaWJyZXM8L2E+Ljxicj5MZSB0b3V0IHNhbnMgcHVibGljaXTDqSwgbmkgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzLjxicj48Yj5TdXIgV2lraUxlcm5pLCB2b3VzIGN1bHRpdmV6IHZvdHJlIGphcmRpbiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjwvYj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSA/XCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogIFwiVGVzdGV6IFdpa2lMZXJuaVwiLFxuICAgIGhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZTogIFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIC8qIFBhZ2UgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuLi4gKi8gICBcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIldpa2lMZXJuaSA6IHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiPHA+PGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgcXVlbHF1ZSBjaG9zZSBkZSBub3V2ZWF1PC9iPjxicj5TaSBkZXNzb3VzIGxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4gVm91cyBwb3V2ZXogYXVzc2kgPGEgaHJlZj0nL3F1aXpzL3RoZW1lcy5odG1sJz5wYXJjb3VyaXIgbGUgc2l0ZSBwYXIgdGjDqG1lcyBvdSBtb3RzLWNsw6lzPC9hPi48L3A+XCIsXG4gICAgLyogUGxhbiBkdSBzaXRlLCBsaXN0ZSBkZXMgdGFncyAqLyAgIFxuICAgIHRhZ0xpc3RUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBkZXMgYXJ0aWNsZXMgZXQgcXVpenMgc3VyIGRlIG5vbWJyZXV4IHRow6htZXMgIVwiLFxuICAgIHRhZ0xpc3RNZXRhRGVzYzogXCJXaWtpTGVybmkgOiBkw6ljb3V2cmlyIGxlcyBkaWZmw6lyZW50cyB0aMOobWVzIGFib3Jkw6lzIHBhciBXaWtpTGVybmkuIElueGV4IGR1IHNpdGUuXCIsXG4gICAgdGFnTGlzdEludHJvOiBcIjxoMz5BdmVjIFdpa2lMZXJuaSwgZGV2ZW5leiBmb3J0IGVuIHRow6htZXMuLi4gT3VpIG1haXMgcXVlbHMgdGjDqG1lcyA/IDopPC9oMz48YmxvY2txdW90ZT5BcmlzdG90ZeKArzogwqvigK9M4oCZaG9tbWUgYSBuYXR1cmVsbGVtZW50IGxhIHBhc3Npb24gZGUgY29ubmHDrnRyZeKApuKAr8K7PC9ibG9ja3F1b3RlPlwiLFxuICAgIC8qIFBhZ2UgcXVpenMgKi9cbiAgICBhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQ6IFwiUmVsaXJlXCIsXG4gICAgcXVpekVsZW1lbnRMaW5rc0ludHJvOiBcIkVuIHNhdm9pciBwbHVzXCIsXG4gICAgcXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZTogXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5p4oCvP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIjxwPkxlIHByaW5jaXBlIGVzdCBzaW1wbGXigK86IDxiPnZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpPC9iPi4gUHVpcyB2b3VzIDxiPmFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZTwvYj4uIFN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgPGI+dW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXM8L2I+IGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gQ+KAmWVzdCB0b3Vqb3VycyA8Yj5sZSBjb250ZW51IGRlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pPC9iPiBjb25jZXJuYW50IGxlcyDCq+KAr2Jvbm5lc+KAr8K7IHLDqXBvbnNlcy4gQ+KAmWVzdCB1bmUgZmHDp29uIGRlIHRlc3RlciDDoCBsYSBmb2lzIHZvdHJlIGNhcGFjaXTDqSBk4oCZYXR0ZW50aW9uIGV0IHZvdHJlIG3DqW1vaXJlLiBMZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG7igJlow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPC9wPjxwPjxiPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZOKAmWF1dHJlcyBzb2x1dGlvbnMgcG91ciBhbcOpbGlvcmVyIHZvdHJlIGN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4uIFBvdXIgZW4gc2F2b2lyIHBsdXMsIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBleHBsYW5hdGlvbkVsZW1lbnRUeHQ6IFwiPHA+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBkZSA8Yj5yZWNldm9pciBwYXIgZS1tYWlsIMOgIGxhIGZyw6lxdWVuY2UgY2hvaXNpZSwgZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXM8L2I+IGV0IHBvcnRhbnQgc3VyIGRlcyBzdWpldHMgdHLDqHMgdmFyacOpcyBkZSA8Yj5jdWx0dXJlIGfDqW7DqXJhbGU8L2I+IChhcnRzLCBoaXN0b2lyZSwgbGl0dMOpcmF0dXJlLCBzY2llbmNlcywgZXRjLikuPC9wPjxwPkNlcyBhcnRpY2xlcyBzb250IGJhc8OpcyBzdXIgPGI+dW5lIG91IHBsdXNpZXVycyBwYWdlcyBkZSBXaWtpcMOpZGlhPC9iPiAoZm91cm5pZXMgZW4gbGllbiksIGRvbnQgPGI+aWxzIGV4dHJhaWVudCBjZXJ0YWluZXMgaW5mb3JtYXRpb25zPC9iPi48L3A+PHA+Q2hhcXVlIHPDqXJpZSBk4oCZYXJ0aWNsZXMgZXN0IDxiPnN1aXZpZSBk4oCZdW4gcXVpejwvYj4gcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPC9wPjxwPjxiPlZvdXMgYXBwcmVuZXogYWluc2kgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+IHRyw6hzIHNpbXBsZW1lbnQuPC9wPlwiLFxuICAgIC8qIEF1dHJlcyAqL1xuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICB0d2l0dGVyQWNjb3VudDogXCJXaWtpTGVybmlcIixcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG59OyIsIi8vIMOgIHN1cHByaW1lciB1bmUgZm9pcyBxdWUgdG91dCByw6ljdXDDqXJlciBkdSBiYWNrZW5kIDpcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybCA6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHVzZXJzR2V0Q29uZmlnVXJsIDogXCIvdXNlci9nZXRjb25maWdcIixcbiAgICBsYW5nIDogXCJmclwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiXG59OyIsIi8vIC0tIEdFU1RJT04gRFUgRk9STVVMQUlSRSBQRVJNRVRUQU5UIEQnQUZGSUNIRVIgRVQgUsOJUE9ORFJFIMOAIFVOIFFVSVpcblxuLy8vIElsIG4nZXN0IHBhcyBuw6ljZXNzYWlyZSBkJ8OqdHJlIGNvbm5lY3TDqSBwb3VyIHLDqXBvbmRyZSBhdSBxdWl6IGV0IHZvaXIgc29uIHLDqXN1bHRhdC5cbi8vLyBNYWlzIHNpIHBhcyBjb25uZWN0w6ksIG9uIHByb3Bvc2Ugw6AgbCdpbnRlcm5hdXRlIGRlIHNlIGNvbm5lY3RlciBvdSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgc2F1dmVnYXJkZXIgc29uIHLDqXN1bHRhdC5cbi8vLyBEYW5zIGNlIGJ1dCBzb24gcsOpc3VsdGF0IGVzdCBzdG9ja8OpIGRhbnMgc29uIG5hdmlnYXRldXIuXG4vLy8gU2kgaWwgZXN0IGNvbm5lY3TDqSwgbCdlbnJlZ2lzdHJlbWVudCBkZSBzb24gcsOpc3VsdGF0IHNlIGZhaXQgYXV0b21hdGlxdWVtZW50IGPDtHTDqSBzZXJ2ZXVyIGV0IHNlcyDDqXZlbnR1ZWxzIHByw6ljw6lkZW50cyByw6lzdWx0YXRzIHNvbnQgYWZmaWNow6lzLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuaW1wb3J0IHsgZ2V0UHJldmlvdXNBbnN3ZXJzLCBxdWVzdGlvbm5haXJlUm91dGVzLCBzYXZlQW5zd2Vyc1JvdXRlIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9xdWVzdGlvbm5haXJlcy5qc1wiO1xuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7IGNoZWNrQW5zd2VyT3VwdXQsIHNhdmVBbnN3ZXIgfSBmcm9tIFwiLi90b29scy9hbnN3ZXJzLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXRMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBnZXREYXRhc0Zyb21JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgZGF0ZUZvcm1hdCwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBsb2FkTWF0b21vIH0gZnJvbSBcIi4vdG9vbHMvbWF0b21vLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24sIGdldFRpbWVEaWZmZXJlbmNlIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB7IG5vUHJldmlvdXNBbnN3ZXIsIHByZXZpb3VzQW5zd2Vyc0xpbmUsIHByZXZpb3VzQW5zd2Vyc1N0YXRzLCBwcmV2aW91c0Fuc3dlcnNUaXRsZSwgcmVzcG9uc2VTYXZlZEVycm9yLCB3YW50VG9TYXZlUmVzcG9uc2VzIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2Fuc3dlclwiKTtcbmNvbnN0IHsgc2VydmVyRXJyb3IgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IG15Rm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZVwiKTtcbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IGJ0blNob3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNob3dRdWVzdGlvbm5haXJlXCIpO1xuY29uc3QgYnRuU3VibWl0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjaGVja1Jlc3BvbnNlc1wiKTtcbmNvbnN0IGV4cGxhbmF0aW9uc1RpdGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleHBsYW5hdGlvbnNUaXRsZVwiKTtcbmNvbnN0IGV4cGxhbmF0aW9uc0NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImV4cGxhbmF0aW9uc0NvbnRlbnRcIik7XG5cbmxldCBpc0Nvbm5lY3RlZCwgdXNlcjtcbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgYnRuU2hvdy5zdHlsZS5kaXNwbGF5PVwiaW5saW5lXCI7Ly8gYm91dG9uIGNhY2jDqSBzaSBKUyBpbmFjdGlmLCBjYXIgSlMgbsOpY2Vzc2FpcmUgcG91ciB2w6lyaWZpZXIgbGVzIHLDqXBvbnNlc1xuICAgICAgICBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1widXNlclwiXSk7Ly8gXCJ1c2VyXCIgY2FyIHNldWxzIGxlcyB1dGlsaXNhdGV1cnMgZGUgYmFzZSBwZXV2ZW50IGVucmVnaXN0cmVyIGxldXJzIHLDqXBvbnNlcyBhdXggcXVpenNcbiAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBlc3QgY29ubmVjdMOpIGV0IGEgZMOpasOgIHLDqXBvbmR1IMOgIGNlIHF1aXosIG9uIGFmZmljaGUgc2VzIHByw6ljw6lkZW50ZXMgcsOpcG9uc2VzIMOgIGxhIHBsYWNlIGR1IHRleHRlIHNlcnZhbnQgw6AgZXhwbGlxdWVyIGxlIHRvcG8gYXV4IG5vdXZlYXV4XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpOy8vIGxpZW4gdmVycyBsZSBjb21wdGUgYWRhcHTDqSBwb3VyIGxlcyB1dGlsaXNhdGV1cnMgY29ubmVjdMOpc1xuICAgICAgICAgICAgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyh1c2VyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBsb2FkTWF0b21vKCk7XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcbmhlbGxvRGV2KCk7XG5cbi8vIEFmZmljaGFnZSBkdSBxdWVzdGlvbm5haXJlIHF1YW5kIGwndXRpbGlzYXRldXIgY2xpcXVlIHN1ciBsZSBib3V0b24gb3Ugc2kgbCdpZCBkdSBmb3JtdWxhaXJlIGVzdCBwYXNzw6llIHBhciBsJ3VybC5cbi8vIETDqWNsZW5jaGUgZW4gbcOqbWUgdGVtcHMgbGUgY2hyb25vbcOodHJlIG1lc3VyYW50IGxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBhdXggcXVlc3Rpb25zLlxuY29uc3Qgc2hvd1F1ZXN0aW9ubmFpcmUgPSAoKSA9Plxue1xuICAgIGNocm9ub0JlZ2luPURhdGUubm93KCk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgIGJ0blNob3cuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICBjb25zdCBoZXJlPXdpbmRvdy5sb2NhdGlvbjsvLyB3aW5kb3cubG9jYXRpb24gw6AgYWpvdXRlciBwb3VyIG5lIHBhcyBxdWl0dGVyIGxhIHBhZ2UgZW4gbW9kZSBcInByZXZpZXdcIi5cbiAgICBpZih3aW5kb3cubG9jYXRpb24uaGFzaCE9PVwiXCIpXG4gICAge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaD1cIlwiOy8vICEgbGUgXCIjXCIgcmVzdGVcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihoZXJlK1wicXVlc3Rpb25uYWlyZVwiKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGhlcmUrXCIjcXVlc3Rpb25uYWlyZVwiKTtcbn1cbmxldCBjaHJvbm9CZWdpbj0wO1xuYnRuU2hvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2hvd1F1ZXN0aW9ubmFpcmUoKTtcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn0pO1xuLy8gTGllbiBwYXNzw6kgcGFyIG1haWwgcG91ciB2b2lyIGRpcmVjdGVtZW50IGxlIHF1aXpcbmlmKGxvY2F0aW9uLmhhc2ghPVwiXCIgJiYgbG9jYXRpb24uaGFzaD09PVwiI3F1ZXN0aW9ubmFpcmVcIilcbiAgICBzaG93UXVlc3Rpb25uYWlyZSgpO1xuXG4vLyBUcmFpdGVtZW50IGRlIGwnZW52b2kgZGUgbGEgcsOpcG9uc2UgZGUgbCd1dGlsaXNhdGV1ciA6XG5sZXQgYW5zd2VyID0ge307XG5teUZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyAgICAgICBcbiAgICAgICAgYnRuU3VibWl0LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7Ly8gc2V1bGVtZW50IHVuIGVudm9pIMOgIGxhIGZvaXMsIFNWUCA6KVxuICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjsvLyBzdXBwcmltZSBsZXMgw6l2ZW50dWVscyBtZXNzYWdlcyBkw6lqw6AgYWZmaWNow6lzXG4gICAgICAgIGNvbnN0IHVzZXJSZXNwb25zZXM9Z2V0RGF0YXNGcm9tSW5wdXRzKG15Rm9ybSk7XG4gICAgICAgIGFuc3dlci5kdXJhdGlvbj1NYXRoLnJvdW5kKChEYXRlLm5vdygpLWNocm9ub0JlZ2luKS8xMDAwKTtcbiAgICAgICAgYW5zd2VyLm5iUXVlc3Rpb25zPTA7XG4gICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzPTA7XG4gICAgICAgIGFuc3dlci5RdWVzdGlvbm5haXJlSWQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlSWRcIikudmFsdWU7XG4gICAgICAgIC8vIExlcyByw6lwb25zZXMgc29udCByZWdyb3Vww6llcyBwYXIgcXVlc3Rpb24sIGRvbmMgcXVhbmQgaWRRdWVzdGlvbiBjaGFuZ2UsIG9uIGNvbm5hw650IGxlIHLDqXN1bHRhdCBwb3VyIGxhIHF1ZXN0aW9uIHByw6ljw6lkZW50ZS5cbiAgICAgICAgLy8gUG91ciBxdSd1bmUgcsOpcG9uc2Ugc29pdCBib25uZSwgaWwgZmF1dCBjb2NoZXIgdG91dGVzIGxlcyBib25uZXMgcsOpcG9uc2VzIChzaSBRQ00pIMOgIGxhIHF1ZXN0aW9uIEVUIGNvY2hlciBhdWN1bmUgZGVzIG1hdXZhaXNlcy5cbiAgICAgICAgbGV0IGlkQ2hvaWNlLCBpZFF1ZXN0aW9uPVwiXCIsIGdvb2RSZXNwb25zZT1mYWxzZTtcbiAgICAgICAgZm9yKGxldCBpdGVtIGluIHVzZXJSZXNwb25zZXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKGl0ZW0uc3RhcnRzV2l0aChcImlzQ29ycmVjdF9yZXNwb25zZV9cIikpLy8gPSBOb3V2ZWxsZSByw6lwb25zZSBwb3NzaWJsZS5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZENob2ljZSA9IGl0ZW0uc3Vic3RyaW5nKGl0ZW0ubGFzdEluZGV4T2YoXCJfXCIpICsgMSk7XG4gICAgICAgICAgICAgICAgLy8gc2kgb24gY2hhbmdlIGRlIHF1ZXN0b25cbiAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicXVlc3Rpb25faWRfcmVzcG9uc2VfXCIraWRDaG9pY2VdIT1pZFF1ZXN0aW9uKSAvLyBvbiBjb21tZW5jZSDDoCB0cmFpdGVyIHVuZSBub3V2ZWxsZSBxdWVzdGlvblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWRRdWVzdGlvbj11c2VyUmVzcG9uc2VzW1wicXVlc3Rpb25faWRfcmVzcG9uc2VfXCIraWRDaG9pY2VdO1xuICAgICAgICAgICAgICAgICAgICBhbnN3ZXIubmJRdWVzdGlvbnMrKztcbiAgICAgICAgICAgICAgICAgICAgaWYoZ29vZFJlc3BvbnNlKSAvLyByw6lzdWx0YXQgZGUgbGEgcXVlc3Rpb24gcHLDqWPDqWRlbnRlXG4gICAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXIubmJDb3JyZWN0QW5zd2VycysrO1xuICAgICAgICAgICAgICAgICAgICBnb29kUmVzcG9uc2U9dHJ1ZTsvLyByw6lwb25zZSBib25uZSBqdXNxdSfDoCBsYSBwcmVtacOocmUgZXJyZXVyLi4uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHVzZXJSZXNwb25zZXNbaXRlbV09PVwidHJ1ZVwiKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZV9cIitpZENob2ljZSkucGFyZW50Tm9kZS5jbGFzc0xpc3QuYWRkKFwiaXNDb3JyZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdPT09dW5kZWZpbmVkKS8vIHVuZSBib25uZSByw6lwb25zZSBuJ2EgcGFzIMOpdMOpIHPDqWxlY3Rpb25uw6llXG4gICAgICAgICAgICAgICAgICAgICAgICBnb29kUmVzcG9uc2U9ZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHVzZXJSZXNwb25zZXNbXCJyZXNwb25zZV9cIitpZENob2ljZV09PT1cIm9uXCIpLy8gcsOpcG9uc2UgY29jaMOpZSBuZSBmYWlzYW50IHBhcyBwYXJ0aWUgZGVzIGJvbm5lc1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnb29kUmVzcG9uc2U9ZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlX1wiK2lkQ2hvaWNlKS5wYXJlbnROb2RlLmNsYXNzTGlzdC5hZGQoXCJpc05vdENvcnJlY3RcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2kgaidhaSBiaWVuIHLDqXBvbmR1IMOgIGxhIGRlcm5pw6hyZSBxdWVzdGlvbiwgaWwgZmF1dCBsZSBjb21wdGVyIGljaSwgY2FyIGplIHN1aXMgc29ydGkgZGUgbGEgYm91Y2xlIDpcbiAgICAgICAgaWYoZ29vZFJlc3BvbnNlKVxuICAgICAgICAgICAgYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMrKztcblxuICAgICAgICAvLyBBZmZpY2hhZ2UgZHUgcsOpc3VsdGF0LCBzdWl2YW50IHNpIGwndXRpbGlzYXRldXIgZXN0IGNvbm5lY3TDqSBvdSBwYXMgZXQgc29uIHNjb3JlIDpcbiAgICAgICAgbGV0IGdldE91cHV0PWNoZWNrQW5zd2VyT3VwdXQoYW5zd2VyKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgZXN0IGNvbm5lY3TDqSwgb24gZW5yZWdpc3RyZSBzb24gcsOpc3VsdGF0IHN1ciBsZSBzZXJ2ZXVyLlxuICAgICAgICAgICAgY29uc3QgeGhyU2F2ZUFuc3dlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrcXVlc3Rpb25uYWlyZVJvdXRlcytzYXZlQW5zd2Vyc1JvdXRlKTtcbiAgICAgICAgICAgIHhoclNhdmVBbnN3ZXIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4aHJSZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgKHhoclJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIreGhyUmVzcG9uc2UubWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIrcmVzcG9uc2VTYXZlZEVycm9yLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ1RlbXBsYXRlLnVzZXJIb21lUGFnZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIHJlZGlyaWdlIHZlcnMgbGUgcsOpc3VsdGF0XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlcmU9d2luZG93LmxvY2F0aW9uOy8vIHdpbmRvdy5sb2NhdGlvbiDDoCBham91dGVyIHBvdXIgbmUgcGFzIHF1aXR0ZXIgbGEgcGFnZSBlbiBtb2RlIFwicHJldmlld1wiLi4uXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oaGVyZStcImV4cGxhbmF0aW9uc1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgIGFuc3dlci50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZSgpOy8vIG9uIGVuIHByb2ZpdGUgcG91ciBtZXR0cmUgbGVzIHBlbmR1bGVzIMOgIGwnaGV1cmUuXG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLnNlbmQoSlNPTi5zdHJpbmdpZnkoYW5zd2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7ICAgLy8gc2kgcGFzIGNvbm5lY3TDqSwgb24gZW5yZWdpc3RyZSBsZSByw6lzdWx0YXQgY8O0dMOpIGNsaWVudCBwb3VyIHBlcm1ldHRyZSBkZSBsZSByZXRyb3V2ZXIgYXUgbW9tZW50IGRlIGxhIGNyw6lhdGlvbiBkdSBjb21wdGUgb3UgZGUgbGEgY29ubmV4aW9uLlxuICAgICAgICAgICAgaWYoc2F2ZUFuc3dlcihhbnN3ZXIpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+PGJyPlwiK3dhbnRUb1NhdmVSZXNwb25zZXM7XG4gICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBnZXRPdXB1dCwgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc3Vic2NyaWJlQnRuc1wiKS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgLy8gaW51dGlsZSBkZSBwcm9wb3NlciBkZSBjcsOpZXIgdW4gY29tcHRlIHNpIGxlIHN0b2NrYWdlIGxvY2FsIG5lIGZvbmN0aW9ubmUgcGFzXG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGdldE91cHV0LCBcIlwiLCBbXCJpbmZvXCJdKTtcbiAgICAgICAgICAgIC8vIG9uIHJlZGlyaWdlIHZlcnMgbGUgcsOpc3VsdGF0XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaD1cIlwiO1xuICAgICAgICAgICAgY29uc3QgaGVyZT13aW5kb3cubG9jYXRpb247Ly8gd2luZG93LmxvY2F0aW9uIMOgIGFqb3V0ZXIgcG91ciBuZSBwYXMgcXVpdHRlciBsYSBwYWdlIGVuIG1vZGUgXCJwcmV2aWV3XCIuLi5cbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oaGVyZStcInJlc3BvbnNlXCIpOyAgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgICAgLy8gKyBhZmZpY2hhZ2UgZGVzIHRleHRlcyBkJ2V4cGxpY2F0aW9ucyBwb3VyIGNoYXF1ZSBxdWVzdGlvblxuICAgICAgICBjb25zdCBleHBsYW5hdGlvbnM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5oZWxwXCIpO1xuICAgICAgICBmb3IobGV0IGkgaW4gZXhwbGFuYXRpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihleHBsYW5hdGlvbnNbaV0uc3R5bGUhPXVuZGVmaW5lZCkgLy8gc2lub24sIGxhIGNvbnNvbGUgYWZmaWNoZSB1bmUgZXJyZXVyIFwiVHlwZUVycm9yOiBleHBsYW5hdGlvbnNbaV0uc3R5bGUgaXMgdW5kZWZpbmVkXCIsIGJpZW4gcXVlIHRvdXQgZm9uY3Rpb25uZSAoPylcbiAgICAgICAgICAgICAgICBleHBsYW5hdGlvbnNbaV0uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn0pXG5cbi8vIEZvbmN0aW9uIHbDqXJpZmlhbnQgbGVzIHByw6ljw6lkZW50ZXMgcsOpcG9uc2VzIGRlIGwndXRpbGlzYXRldXJcbi8vIFV0aWxlIHNpIGNvbm5lY3TDqSBsb3JzIGR1IHByZW1pZXIgY2hhcmdlbWVudCBkZSBsYSBwYWdlLCBwdWlzIGFwcsOocyB1bmUgbm91dmVsbGUgcsOpcG9uc2VcbmNvbnN0IGNoZWNrUHJldmlvdXNSZXNwb25zZXMgPSAodXNlcikgPT5cbntcbiAgICBjb25zdCB4aHJQcmV2aW91c1JlcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoclByZXZpb3VzUmVzLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3F1ZXN0aW9ubmFpcmVSb3V0ZXMrZ2V0UHJldmlvdXNBbnN3ZXJzK3VzZXIuaWQrXCIvXCIrZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlSWRcIikudmFsdWUpO1xuICAgIHhoclByZXZpb3VzUmVzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmJSZXNwb25zZXM9cmVzcG9uc2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxldCBwcmV2aW91c0Fuc3dlcnNDb250ZW50PVwiXCI7XG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChleHBsYW5hdGlvbnNUaXRsZSwgXCJzcGFuXCIsIHByZXZpb3VzQW5zd2Vyc1RpdGxlLnJlcGxhY2UoXCIjTk9NXCIsIHVzZXIubmFtZSkpO1xuICAgICAgICAgICAgICAgIGlmKG5iUmVzcG9uc2VzIT09MClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3ROYlF1ZXN0aW9ucz0wLCB0b3ROYkNvcnJlY3RBbnN3ZXJzPTAsIHRvdER1cmF0aW9uPTAsIG1hcExpbmVDb250ZW50O1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdE5iUXVlc3Rpb25zKz1yZXNwb25zZVtpXS5uYlF1ZXN0aW9uczsvLyAhIG9uIG5lIHBldXQgc2UgYmFzZXIgc3VyIGxhIHZlcnNpb24gYWN0dWVsbGUgZHUgcXVpeiwgY2FyIGxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYSBwdSDDqXZvbHVlci5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdE5iQ29ycmVjdEFuc3dlcnMrPXJlc3BvbnNlW2ldLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3REdXJhdGlvbis9cmVzcG9uc2VbaV0uZHVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBMaW5lQ29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURUFOU1dFUiA6IGRhdGVGb3JtYXQocmVzcG9uc2VbaV0uY3JlYXRlZEF0LCBsYW5nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQkNPUlJFQ1RBTlNXRVJTIDogcmVzcG9uc2VbaV0ubmJDb3JyZWN0QW5zd2VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQlFVRVNUSU9OUyA6IHJlc3BvbnNlW2ldLm5iUXVlc3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWR0RVUkFUSU9OIDogcmVzcG9uc2VbaV0uZHVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Fuc3dlcnNDb250ZW50Kz1cIjxsaT5cIityZXBsYWNlQWxsKHByZXZpb3VzQW5zd2Vyc0xpbmUsIG1hcExpbmVDb250ZW50KStcIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWFwTGluZUNvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBVkdEVVJBVElPTiA6IE1hdGgucm91bmQodG90RHVyYXRpb24vbmJSZXNwb25zZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgQVZHQ09SUkVDVEFOU1dFUlMgOiBNYXRoLnJvdW5kKHRvdE5iQ29ycmVjdEFuc3dlcnMvdG90TmJRdWVzdGlvbnMqMTAwKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Fuc3dlcnNDb250ZW50PVwiPGg1PlwiK3JlcGxhY2VBbGwocHJldmlvdXNBbnN3ZXJzU3RhdHMsIG1hcExpbmVDb250ZW50KStcIjwvaDU+XCIrcHJldmlvdXNBbnN3ZXJzQ29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChleHBsYW5hdGlvbnNDb250ZW50LCBcInVsXCIsIHByZXZpb3VzQW5zd2Vyc0NvbnRlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zQ29udGVudCwgXCJ1bFwiLCBub1ByZXZpb3VzQW5zd2VyKTtcbiAgICAgICAgICAgICAgICAvLyBkYW5zIHVuIGNhcyBjb21tZSBkYW5zIGwnYXV0cmUsIGJvdXRvbiBwb3VyIHJldmVuaXIgw6AgbCdhY2N1ZWlsIGR1IGNvbXB0ZVxuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zQ29udGVudCwgXCJwXCIsIFwiPGEgaHJlZj1cXFwiL1wiK2NvbmZpZ1RlbXBsYXRlLnVzZXJIb21lUGFnZStcIlxcXCIgY2xhc3M9XFxcImJ1dHRvbiBjYXJkYm9hcmRcXFwiPlwiK2NvbmZpZ1RlbXBsYXRlLnVzZXJIb21lUGFnZVR4dCtcIjwvYT5cIiwgXCJcIiwgW1wiYnRuXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgeGhyUHJldmlvdXNSZXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgeGhyUHJldmlvdXNSZXMuc2VuZCgpO1xufSIsImNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uL2NvbmZpZy9nZW5lcmFsXCIpO1xuXG5pbXBvcnQgeyBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9sYW5nL1wiK2NvbmZpZ0Zyb250RW5kLmxhbmcrXCIvYW5zd2VyXCIpO1xuXG4vLyBFbnJlZ2lzdHJlbWVudCBjw7R0w6kgY2xpZW50IGR1IGRlcm5pZXIgcsOpc3VsdGF0IMOgIHVuIHF1aXogZW4gYXR0ZW5kYW50IGQnw6p0cmUgY29ubmVjdMOpXG5leHBvcnQgY29uc3Qgc2F2ZUFuc3dlciA9IChhbnN3ZXIpID0+XG57XG4gICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICB7XG4gICAgICAgIHNhdmVMb2NhbHkoXCJsYXN0QW5zd2VyXCIsIGFuc3dlcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gUmV0b3VybmUgdW4gdGV4dGUgc3VpdmFudCBsZSBub21icmUgZGUgYm9ubmVzIHLDqXBvbnNlc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyT3VwdXQgPSAoYW5zd2VyKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAge1xuICAgICAgICBjb25zdCByYXRpbz1hbnN3ZXIubmJDb3JyZWN0QW5zd2Vycy9hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIGNvbnN0IG1hcE9iaj1cbiAgICAgICAge1xuICAgICAgICAgICAgRFVSQVRJT046IGFuc3dlci5kdXJhdGlvbixcbiAgICAgICAgICAgIE5CQ09SUkVDVEFOU1dFUlM6IGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzLFxuICAgICAgICAgICAgTkJRVUVTVElPTlM6IGFuc3dlci5uYlF1ZXN0aW9uc1xuICAgICAgICB9XG4gICAgICAgIGxldCBvdXRwdXQ9XCJcIjtcbiAgICAgICAgaWYocmF0aW8gPCAwLjQpXG4gICAgICAgICAgICBvdXRwdXQ9cmVwbGFjZUFsbCh0eHQuY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwsIG1hcE9iaik7XG4gICAgICAgIGVsc2UgaWYocmF0aW8gPCAwLjgpXG4gICAgICAgICAgICBvdXRwdXQ9cmVwbGFjZUFsbCh0eHQuY2hlY2tSZXNwb25zZXNPdXB1dE1lZGl1bSwgbWFwT2JqKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3V0cHV0PXJlcGxhY2VBbGwodHh0LmNoZWNrUmVzcG9uc2VzT3VwdXRTdWNjZXNzLCBtYXBPYmopO1xuICAgICAgICBpZihvdXRwdXQpXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gXCJcIjtcbn0iLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBtYXRvbW8gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL21hdG9tby5qc1wiO1xuXG4vLyBGb25jdGlvbiBjaGFyZ2VhbnQgbGUgY29kZSBtYXRvbW9cbmV4cG9ydCBjb25zdCBsb2FkTWF0b21vID0gKCkgPT5cbntcbiAgICAvLyBjaGFyZ2VtZW50IGRlIG1hdG9tb1xuICAgIHZhciBfcGFxID0gd2luZG93Ll9wYXEgPSB3aW5kb3cuX3BhcSB8fCBbXTtcbiAgICAvL2Fqb3V0IGNuaWwgIDpcbiAgICBfcGFxLnB1c2goW2Z1bmN0aW9uKClcbiAgICB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgZnVuY3Rpb24gZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgbm93VHMgPSBNYXRoLnJvdW5kKG5vdy5nZXRUaW1lKCkgLyAxMDAwKSxcbiAgICAgICAgICAgIHZpc2l0b3JJbmZvID0gc2VsZi5nZXRWaXNpdG9ySW5mbygpO1xuICAgICAgICAgICAgdmFyIGNyZWF0ZVRzID0gcGFyc2VJbnQodmlzaXRvckluZm9bMl0pO1xuICAgICAgICAgICAgdmFyIGNvb2tpZVRpbWVvdXQgPSAzMzY5NjAwMDsgLy8gMTMgbW9pcyBlbiBzZWNvbmRlc1xuICAgICAgICAgICAgdmFyIG9yaWdpbmFsVGltZW91dCA9IGNyZWF0ZVRzICsgY29va2llVGltZW91dCAtIG5vd1RzO1xuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsVGltZW91dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFZpc2l0b3JDb29raWVUaW1lb3V0KCBnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0KCkgKTtcbiAgICB9XSk7XG4gICAgLy8tLWZpbiBham91dCBjbmlsXG4gICAgX3BhcS5wdXNoKFsndHJhY2tQYWdlVmlldyddKTtcbiAgICBfcGFxLnB1c2goWydlbmFibGVMaW5rVHJhY2tpbmcnXSk7XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgdT1tYXRvbW8udXJsO1xuICAgICAgICBfcGFxLnB1c2goWydzZXRUcmFja2VyVXJsJywgdSsnbWF0b21vLnBocCddKTtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0U2l0ZUlkJywgbWF0b21vLnNpdGVJZF0pO1xuICAgICAgICB2YXIgZD1kb2N1bWVudCwgZz1kLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpLCBzPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdO1xuICAgICAgICBnLnR5cGU9J3RleHQvamF2YXNjcmlwdCc7IGcuYXN5bmM9dHJ1ZTsgZy5zcmM9dSsnbWF0b21vLmpzJzsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpO1xuICAgIH0pKCk7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6IG91IGQndW4gZ3JvdXBlIGRlIHF1aXpzXG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICghaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSB8fCAhaXNFbXB0eShhbnN3ZXIuR3JvdXBJZCkpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkpXG4gICAgICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZGF0YXMuR3JvdXBJZD1hbnN3ZXIuR3JvdXBJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvYW5zd2VyLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9ubmFpcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Fuc3dlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJjaGVja1Jlc3BvbnNlc091cHV0RmFpbCIsImNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0iLCJjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyIsIm5lZWRJbnRlZ2VyTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWRJbnRlZ2VyTnVtYmVyU2Vjb25kZXNSZXNwb25zZSIsIm5lZWRJbnRlZ2VyTnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE1pbk51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWROdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE1heE51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWRNaW5OdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIiwibm9QcmV2aW91c0Fuc3dlciIsInByZXZpb3VzQW5zd2Vyc0xpbmUiLCJwcmV2aW91c0Fuc3dlcnNTdGF0cyIsInByZXZpb3VzQW5zd2Vyc1RpdGxlIiwicmVzcG9uc2VTYXZlZEVycm9yIiwicmVzcG9uc2VTYXZlZE1lc3NhZ2UiLCJzdGF0c1VzZXIiLCJ3YW50VG9TYXZlUmVzcG9uc2VzIiwiYWRkQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJiYWRVcmwiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuU2hvd09uV2ViU2l0ZSIsImRlbGV0ZUJ0blR4dCIsImRlbGV0ZUZhaWxNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aENyb24iLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aFRva2VuIiwibmVlZGVkUGFyYW1zIiwibmV4dFBhZ2UiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJub3RWYWxpZEZvcm1hdCIsInByZXZpb3VzUGFnZSIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzY3JpcHRUaW1pbmdJbmZvIiwic3RhdHNBZG1pbiIsInN1YnNjcmlwdGlvbkNhbGwiLCJ1cGRhdGVCdG5UeHQiLCJ1cGRhdGVPa01lc3NhZ2UiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJhYm91dFBhZ2UiLCJjZ3VQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwidXNlckhvbWVQYWdlVHh0IiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibWFpbFJlY2lwaWVudFR4dCIsImxpY2VuY2VUeHQiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJob21lU3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJuZXdzTGlzdFRpdGxlIiwidGFnTGlzdFRpdGxlIiwidGFnTGlzdE1ldGFEZXNjIiwidGFnTGlzdEludHJvIiwiYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0IiwicXVpekVsZW1lbnRMaW5rc0ludHJvIiwicXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZSIsImV4cGxhbmF0aW9uRWxlbWVudFR4dCIsInR3aXR0ZXJBY2NvdW50IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJ1c2Vyc0dldENvbmZpZ1VybCIsImNvbmZpZ1RlbXBsYXRlIiwibXlGb3JtIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdlJlc3BvbnNlIiwiYnRuU2hvdyIsImJ0blN1Ym1pdCIsImV4cGxhbmF0aW9uc1RpdGxlIiwiZXhwbGFuYXRpb25zQ29udGVudCIsImlzQ29ubmVjdGVkIiwidXNlciIsImluaXRpYWxpc2UiLCJzdHlsZSIsImRpc3BsYXkiLCJjaGVja1Nlc3Npb24iLCJnZXRMb2NhbHkiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsImNoZWNrUHJldmlvdXNSZXNwb25zZXMiLCJsb2FkTWF0b21vIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsImhlbGxvRGV2Iiwic2hvd1F1ZXN0aW9ubmFpcmUiLCJjaHJvbm9CZWdpbiIsIm5vdyIsImhlcmUiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhhc2giLCJhc3NpZ24iLCJhZGRFdmVudExpc3RlbmVyIiwicHJldmVudERlZmF1bHQiLCJhZGRFbGVtZW50IiwiYW5zd2VyIiwiaW5uZXJIVE1MIiwidXNlclJlc3BvbnNlcyIsImdldERhdGFzRnJvbUlucHV0cyIsImR1cmF0aW9uIiwicm91bmQiLCJuYlF1ZXN0aW9ucyIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJpZENob2ljZSIsImlkUXVlc3Rpb24iLCJnb29kUmVzcG9uc2UiLCJpdGVtIiwic3RhcnRzV2l0aCIsImxhc3RJbmRleE9mIiwicGFyZW50Tm9kZSIsImNsYXNzTGlzdCIsImFkZCIsImdldE91cHV0IiwiY2hlY2tBbnN3ZXJPdXB1dCIsInhoclNhdmVBbnN3ZXIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInhoclJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwibWVzc2FnZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJzZW5kIiwic3RyaW5naWZ5Iiwic2F2ZUFuc3dlciIsInF1ZXJ5U2VsZWN0b3IiLCJleHBsYW5hdGlvbnMiLCJxdWVyeVNlbGVjdG9yQWxsIiwieGhyUHJldmlvdXNSZXMiLCJyZXNwb25zZSIsIm5iUmVzcG9uc2VzIiwicHJldmlvdXNBbnN3ZXJzQ29udGVudCIsInRvdE5iUXVlc3Rpb25zIiwidG90TmJDb3JyZWN0QW5zd2VycyIsInRvdER1cmF0aW9uIiwibWFwTGluZUNvbnRlbnQiLCJEQVRFQU5TV0VSIiwiZGF0ZUZvcm1hdCIsImNyZWF0ZWRBdCIsIk5CQ09SUkVDVEFOU1dFUlMiLCJOQlFVRVNUSU9OUyIsIkFWR0RVUkFUSU9OIiwicmVwbGFjZUFsbCIsIkFWR0NPUlJFQ1RBTlNXRVJTIiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJHcm91cElkIiwic2F2ZUxvY2FseSIsInJhdGlvIiwiRFVSQVRJT04iLCJvdXRwdXQiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiaW5wdXRzQ29uZiIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImRhdGFzIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImVudHJpZSIsImVudHJpZXMiLCJlbXB5Rm9ybSIsInR5cGUiLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwiX3BhcSIsInB1c2giLCJzZWxmIiwiZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCIsIm5vd1RzIiwiZ2V0VGltZSIsInZpc2l0b3JJbmZvIiwiZ2V0VmlzaXRvckluZm8iLCJjcmVhdGVUcyIsInBhcnNlSW50IiwiY29va2llVGltZW91dCIsIm9yaWdpbmFsVGltZW91dCIsInNldFZpc2l0b3JDb29raWVUaW1lb3V0IiwidSIsImQiLCJnIiwicyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYXN5bmMiLCJzcmMiLCJpbnNlcnRCZWZvcmUiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ4aHIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIiwib25lcnJvciIsInN0YXR1c1RleHQiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLG1DQUFELENBQXJCOztBQUNBLElBQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQyxxREFBRCxDQUE5Qjs7QUFFQUUsTUFBTSxDQUFDQyxPQUFQO0FBRUlDLFFBQU0sRUFBRSwyQkFGWjtBQUdJQyxTQUFPLEVBQUUsdUJBSGI7QUFJSUMsV0FBUyxFQUFFLFNBSmY7QUFLSUMsWUFBVSxFQUFFLG1CQUxoQjtBQU1JQyxZQUFVLEVBQUUsbUJBTmhCO0FBT0lDLGFBQVcsRUFBRSx1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bGUiOiIuL0pTL3F1ZXN0aW9ubmFpcmUuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvcXVlc3Rpb25uYWlyZS5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBkZWZhdWx0UmVjZWlwdERheXM6IFwiMTQ3XCIsIC8vIFBhciBkw6lmYXV0LCBxdWVsKHMpIGpvdXIocykgZGUgbGEgc2VtYWluZSwgbCd1dGlsaXNhdGV1ciByZcOnb2l0LWlsIHF1ZWxxdWUgY2hvc2UgPyAoMT1kaW1hbmNoZSwgMj1sdW5kaS4uLiA3PXNhbWVkaSlcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDAsLy8gaWYgMCA9IHVubGltaXRlZFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxMCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogMyxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEyLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjo3LCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjEsIC8vIGlkZW1cbiAgICBtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZTogNTAsIC8vIGZvciBzdWJzY3JpcHRpb24ncyBlLW1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICBmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIDogXCJwdWJsaXNoaW5nQXRcIiwgLy8gZmllbGQgdG8gYmUgdXNlZCB0byBjcmVhdGUgdGhlIGxpc3Qgb2YgdGhlIGxhc3QgcXVlc3Rpb25uYWlyZXMsIGNhbiBiZSBcImNyZWF0ZWRBdFwiLCBcInVwZGF0ZWRBdFwiIG9yIFwicHVibGlzaGluZ0F0XCJcbiAgICAvLyBHcm91cHMgOlxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluOiAxLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWF4OiAwLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAxLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDUwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMCxcbiAgICAvLyBRdWVzdGlvbnMgJiByZXNwb25zZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlc1xufTsiLCIvLyBTaSBub24gdXRpbGlzw6ksIHN1cHByaW1lciBsJ2FwcGVsIGRlcyBKUyBmcm9udC1lbmQgcHVpcyByZWNvbXBpbGVyLlxuLy8gUmV2b2lyIGNvbW1lbnQgcsOpb3JnYW5pc2VyIGNlbGEgc291cy1mb3JtZSBkZSBtb2R1bGUgaW5kw6lwZW5kYW50LlxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIFN0YXRzIE1hdG9tbyA6XG4gICAgbWF0b21vOiB7IHVybDogXCJodHRwczovL3N0YXRzLmxlLWZhYi1sYWIuY29tL1wiLCBzaXRlSWQ6IFwiNVwiIH0sXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2Fuc3dlclwiOiBcIi4uL2xhbmcvZnIvYW5zd2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvYW5zd2VyJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwgOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IDx1PjxiPk5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TIHF1ZXN0aW9uczwvYj48L3U+LiBDJ2VzdCBjZXJ0YWluLCB2b3VzIGZlcmV6IG1pZXV4IGxhIHByb2NoYWluZSBmb2lzICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiA8dT48Yj5OQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUyBxdWVzdGlvbnM8L2I+PC91Pi4gQydlc3QgcGFzIG1hbCBkdSB0b3V0ICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogPHU+PGI+TkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMgcXVlc3Rpb25zPC9iPjwvdT4uIEJyYXZvICEgUmllbiBuZSB2b3VzIMOpY2hhcHBlICFcIixcbiAgICBuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIgZGUgc2Vjb25kZXMuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGF1c3NpIMOpbGV2w6kuXCIsXG4gICAgbmVlZE1pbk51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgbmUgcGV1dCDDqnRyZSBpbmbDqXJpZXVyIMOgIDEuXCIsXG4gICAgbmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWROdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIHN1cMOpcmlldXIgYXUgbm9tYnJlIGRlIHF1ZXN0aW9ucy5cIixcbiAgICBuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZi5cIixcbiAgICBuZWVkTWluTnVtYmVyU2Vjb25kZXNSZXNwb25zZSA6IFwiTGEgZHVyw6llIGRlIGxhIHLDqXBvbnNlIG5lIHBldXQgw6p0cmUgbsOpZ2F0aXZlLlwiLFxuICAgIG5vUHJldmlvdXNBbnN3ZXI6IFwiT24gZGlyYWl0IHF1ZSBjJ2VzdCBsYSBwcmVtacOocmUgZm9pcyBxdWUgdm91cyByw6lwb25kZXogw6AgY2UgcXVpei4gQm9ubmUgbGVjdHVyZSAhXCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzTGluZTogXCJMZSBEQVRFQU5TV0VSLCB2b3VzIGF2ZXogcsOpcG9uZHUgY29ycmVjdGVtZW50IMOgIE5CQ09SUkVDVEFOU1dFUlMgcXVlc3Rpb25zIHN1ciBOQlFVRVNUSU9OUyBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcy5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNTdGF0czogXCJFbiBtb3llbm5lLCB2b3VzIGF2ZXogcsOpcG9uZHUgw6AgY2UgcXVpeiBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcywgZW4gYXlhbnQgPGI+QVZHQ09SUkVDVEFOU1dFUlMgJSBkZSBib25uZXMgcsOpcG9uc2VzPC9iPi5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNUaXRsZTogXCJCb25qb3VyICNOT00sIHZvaWNpIHZvcyBwcsOpY8OpZGVudHMgcsOpc3VsdGF0cyDDoCBjZSBxdWl6XCIsXG4gICAgcmVzcG9uc2VTYXZlZEVycm9yIDogXCJDZXBlbmRhbnQgdW5lIGVycmV1ciBhIMOpdMOpIHJlbmNvbnRyw6llIGR1cmFudCBsJ2VucmVnaXN0cmVtZW50IGRlIHZvdHJlIHLDqXN1bHRhdC4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICByZXNwb25zZVNhdmVkTWVzc2FnZSA6IFwiVm90cmUgcsOpc3VsdGF0IGEgw6l0w6kgZW5yZWdpc3Ryw6kuIDxhIGhyZWY9Jy8jVVJMJz5BY2PDqGRlciDDoCB0b3VzIHZvcyBxdWl6czwvYT4uXCIsXG4gICAgc3RhdHNVc2VyOiBcIlZvdXMgYXZleiBlbnJlZ2lzdHLDqSA8Yj5OQkFOU1dFUlMgcsOpcG9uc2VTMSDDoCBOQlFVRVNUSU9OTkFJUkVTIHF1aXpTMiBkaWZmw6lyZW50UzM8L2I+IHN1ciBsZXMgTkJUT1RRVUVTVElPTk5BSVJFUyBwcm9wb3PDqVM0IHBhciBsZSBzaXRlLjxicj5FbiBtb3llbm5lLCB2b3VzIGF2ZXogbWlzIEFWR0RVUkFUSU9OIHNlY29uZGVzIMOgIHLDqXBvbmRyZSBldCBhdmV6IDxiPmNvcnJlY3RlbWVudCByw6lwb25kdSDDoCBBVkdDT1JSRUNUQU5TV0VSUyAlIGRlcyBxdWVzdGlvbnM8L2I+LlwiLFxuICAgIHdhbnRUb1NhdmVSZXNwb25zZXM6IFwiU2kgdm91cyBsZSBzb3VoYWl0ZXosIHZvdXMgcG91dmV6IDx1PjxiPnNhdXZlZ2FyZGVyIHZvdHJlIHLDqXN1bHRhdDwvYj48L3U+IGVuIGNyw6lhbnQgdm90cmUgY29tcHRlIGNpLWRlc3NvdXMuIENlbGEgdm91cyBwZXJtZXR0cmEgYXVzc2kgZGUgPHU+PGI+cmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBcXFwiZ3JhaW5lcyBkZSBjdWx0dXJlXFxcIjwvYj48L3U+IGRpcmVjdGVtZW50IHN1ciB2b3RyZSBlLW1haWwuXCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyDDoCBzdXBwcmltZXIgdW5lIGZvaXMgcXVlIHRvdXQgcsOpY3Vww6lyZXIgZHUgYmFja2VuZCA6XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmwgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICB1c2Vyc0dldENvbmZpZ1VybCA6IFwiL3VzZXIvZ2V0Y29uZmlnXCIsXG4gICAgbGFuZyA6IFwiZnJcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIlxufTsiLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBEJ0FGRklDSEVSIEVUIFLDiVBPTkRSRSDDgCBVTiBRVUlaXG5cbi8vLyBJbCBuJ2VzdCBwYXMgbsOpY2Vzc2FpcmUgZCfDqnRyZSBjb25uZWN0w6kgcG91ciByw6lwb25kcmUgYXUgcXVpeiBldCB2b2lyIHNvbiByw6lzdWx0YXQuXG4vLy8gTWFpcyBzaSBwYXMgY29ubmVjdMOpLCBvbiBwcm9wb3NlIMOgIGwnaW50ZXJuYXV0ZSBkZSBzZSBjb25uZWN0ZXIgb3UgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIHNhdXZlZ2FyZGVyIHNvbiByw6lzdWx0YXQuXG4vLy8gRGFucyBjZSBidXQgc29uIHLDqXN1bHRhdCBlc3Qgc3RvY2vDqSBkYW5zIHNvbiBuYXZpZ2F0ZXVyLlxuLy8vIFNpIGlsIGVzdCBjb25uZWN0w6ksIGwnZW5yZWdpc3RyZW1lbnQgZGUgc29uIHLDqXN1bHRhdCBzZSBmYWl0IGF1dG9tYXRpcXVlbWVudCBjw7R0w6kgc2VydmV1ciBldCBzZXMgw6l2ZW50dWVscyBwcsOpY8OpZGVudHMgcsOpc3VsdGF0cyBzb250IGFmZmljaMOpcy5cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIHRpcsOpcyBkdSBiYWNrZW5kIDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmltcG9ydCB7IGdldFByZXZpb3VzQW5zd2VycywgcXVlc3Rpb25uYWlyZVJvdXRlcywgc2F2ZUFuc3dlcnNSb3V0ZSB9IGZyb20gXCIuLi8uLi9jb25maWcvcXVlc3Rpb25uYWlyZXMuanNcIjtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyBjaGVja0Fuc3dlck91cHV0LCBzYXZlQW5zd2VyIH0gZnJvbSBcIi4vdG9vbHMvYW5zd2Vycy5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgbG9hZE1hdG9tbyB9IGZyb20gXCIuL3Rvb2xzL21hdG9tby5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRUaW1lRGlmZmVyZW5jZSB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBub1ByZXZpb3VzQW5zd2VyLCBwcmV2aW91c0Fuc3dlcnNMaW5lLCBwcmV2aW91c0Fuc3dlcnNTdGF0cywgcHJldmlvdXNBbnN3ZXJzVGl0bGUsIHJlc3BvbnNlU2F2ZWRFcnJvciwgd2FudFRvU2F2ZVJlc3BvbnNlcyB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9hbnN3ZXJcIik7XG5jb25zdCB7IHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBteUZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVcIik7XG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5jb25zdCBidG5TaG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzaG93UXVlc3Rpb25uYWlyZVwiKTtcbmNvbnN0IGJ0blN1Ym1pdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2hlY2tSZXNwb25zZXNcIik7XG5jb25zdCBleHBsYW5hdGlvbnNUaXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhwbGFuYXRpb25zVGl0bGVcIik7XG5jb25zdCBleHBsYW5hdGlvbnNDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleHBsYW5hdGlvbnNDb250ZW50XCIpO1xuXG5sZXQgaXNDb25uZWN0ZWQsIHVzZXI7XG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGJ0blNob3cuc3R5bGUuZGlzcGxheT1cImlubGluZVwiOy8vIGJvdXRvbiBjYWNow6kgc2kgSlMgaW5hY3RpZiwgY2FyIEpTIG7DqWNlc3NhaXJlIHBvdXIgdsOpcmlmaWVyIGxlcyByw6lwb25zZXNcbiAgICAgICAgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKFtcInVzZXJcIl0pOy8vIFwidXNlclwiIGNhciBzZXVscyBsZXMgdXRpbGlzYXRldXJzIGRlIGJhc2UgcGV1dmVudCBlbnJlZ2lzdHJlciBsZXVycyByw6lwb25zZXMgYXV4IHF1aXpzXG4gICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgZXN0IGNvbm5lY3TDqSBldCBhIGTDqWrDoCByw6lwb25kdSDDoCBjZSBxdWl6LCBvbiBhZmZpY2hlIHNlcyBwcsOpY8OpZGVudGVzIHLDqXBvbnNlcyDDoCBsYSBwbGFjZSBkdSB0ZXh0ZSBzZXJ2YW50IMOgIGV4cGxpcXVlciBsZSB0b3BvIGF1eCBub3V2ZWF1eFxuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKTsvLyBsaWVuIHZlcnMgbGUgY29tcHRlIGFkYXB0w6kgcG91ciBsZXMgdXRpbGlzYXRldXJzIGNvbm5lY3TDqXNcbiAgICAgICAgICAgIGNoZWNrUHJldmlvdXNSZXNwb25zZXModXNlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbG9hZE1hdG9tbygpO1xuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7XG5oZWxsb0RldigpO1xuXG4vLyBBZmZpY2hhZ2UgZHUgcXVlc3Rpb25uYWlyZSBxdWFuZCBsJ3V0aWxpc2F0ZXVyIGNsaXF1ZSBzdXIgbGUgYm91dG9uIG91IHNpIGwnaWQgZHUgZm9ybXVsYWlyZSBlc3QgcGFzc8OpZSBwYXIgbCd1cmwuXG4vLyBEw6ljbGVuY2hlIGVuIG3Dqm1lIHRlbXBzIGxlIGNocm9ub23DqHRyZSBtZXN1cmFudCBsYSBkdXLDqWUgZGUgbGEgcsOpcG9uc2UgYXV4IHF1ZXN0aW9ucy5cbmNvbnN0IHNob3dRdWVzdGlvbm5haXJlID0gKCkgPT5cbntcbiAgICBjaHJvbm9CZWdpbj1EYXRlLm5vdygpO1xuICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICBidG5TaG93LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgY29uc3QgaGVyZT13aW5kb3cubG9jYXRpb247Ly8gd2luZG93LmxvY2F0aW9uIMOgIGFqb3V0ZXIgcG91ciBuZSBwYXMgcXVpdHRlciBsYSBwYWdlIGVuIG1vZGUgXCJwcmV2aWV3XCIuXG4gICAgaWYod2luZG93LmxvY2F0aW9uLmhhc2ghPT1cIlwiKVxuICAgIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjsvLyAhIGxlIFwiI1wiIHJlc3RlXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oaGVyZStcInF1ZXN0aW9ubmFpcmVcIik7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihoZXJlK1wiI3F1ZXN0aW9ubmFpcmVcIik7XG59XG5sZXQgY2hyb25vQmVnaW49MDtcbmJ0blNob3cuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNob3dRdWVzdGlvbm5haXJlKCk7XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59KTtcbi8vIExpZW4gcGFzc8OpIHBhciBtYWlsIHBvdXIgdm9pciBkaXJlY3RlbWVudCBsZSBxdWl6XG5pZihsb2NhdGlvbi5oYXNoIT1cIlwiICYmIGxvY2F0aW9uLmhhc2g9PT1cIiNxdWVzdGlvbm5haXJlXCIpXG4gICAgc2hvd1F1ZXN0aW9ubmFpcmUoKTtcblxuLy8gVHJhaXRlbWVudCBkZSBsJ2Vudm9pIGRlIGxhIHLDqXBvbnNlIGRlIGwndXRpbGlzYXRldXIgOlxubGV0IGFuc3dlciA9IHt9O1xubXlGb3JtLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgICAgICAgXG4gICAgICAgIGJ0blN1Ym1pdC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiOy8vIHNldWxlbWVudCB1biBlbnZvaSDDoCBsYSBmb2lzLCBTVlAgOilcbiAgICAgICAgZGl2UmVzcG9uc2UuaW5uZXJIVE1MPVwiXCI7Ly8gc3VwcHJpbWUgbGVzIMOpdmVudHVlbHMgbWVzc2FnZXMgZMOpasOgIGFmZmljaMOpc1xuICAgICAgICBjb25zdCB1c2VyUmVzcG9uc2VzPWdldERhdGFzRnJvbUlucHV0cyhteUZvcm0pO1xuICAgICAgICBhbnN3ZXIuZHVyYXRpb249TWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1jaHJvbm9CZWdpbikvMTAwMCk7XG4gICAgICAgIGFuc3dlci5uYlF1ZXN0aW9ucz0wO1xuICAgICAgICBhbnN3ZXIubmJDb3JyZWN0QW5zd2Vycz0wO1xuICAgICAgICBhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZUlkXCIpLnZhbHVlO1xuICAgICAgICAvLyBMZXMgcsOpcG9uc2VzIHNvbnQgcmVncm91cMOpZXMgcGFyIHF1ZXN0aW9uLCBkb25jIHF1YW5kIGlkUXVlc3Rpb24gY2hhbmdlLCBvbiBjb25uYcOudCBsZSByw6lzdWx0YXQgcG91ciBsYSBxdWVzdGlvbiBwcsOpY8OpZGVudGUuXG4gICAgICAgIC8vIFBvdXIgcXUndW5lIHLDqXBvbnNlIHNvaXQgYm9ubmUsIGlsIGZhdXQgY29jaGVyIHRvdXRlcyBsZXMgYm9ubmVzIHLDqXBvbnNlcyAoc2kgUUNNKSDDoCBsYSBxdWVzdGlvbiBFVCBjb2NoZXIgYXVjdW5lIGRlcyBtYXV2YWlzZXMuXG4gICAgICAgIGxldCBpZENob2ljZSwgaWRRdWVzdGlvbj1cIlwiLCBnb29kUmVzcG9uc2U9ZmFsc2U7XG4gICAgICAgIGZvcihsZXQgaXRlbSBpbiB1c2VyUmVzcG9uc2VzKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihpdGVtLnN0YXJ0c1dpdGgoXCJpc0NvcnJlY3RfcmVzcG9uc2VfXCIpKS8vID0gTm91dmVsbGUgcsOpcG9uc2UgcG9zc2libGUuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWRDaG9pY2UgPSBpdGVtLnN1YnN0cmluZyhpdGVtLmxhc3RJbmRleE9mKFwiX1wiKSArIDEpO1xuICAgICAgICAgICAgICAgIC8vIHNpIG9uIGNoYW5nZSBkZSBxdWVzdG9uXG4gICAgICAgICAgICAgICAgaWYodXNlclJlc3BvbnNlc1tcInF1ZXN0aW9uX2lkX3Jlc3BvbnNlX1wiK2lkQ2hvaWNlXSE9aWRRdWVzdGlvbikgLy8gb24gY29tbWVuY2Ugw6AgdHJhaXRlciB1bmUgbm91dmVsbGUgcXVlc3Rpb25cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlkUXVlc3Rpb249dXNlclJlc3BvbnNlc1tcInF1ZXN0aW9uX2lkX3Jlc3BvbnNlX1wiK2lkQ2hvaWNlXTtcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VyLm5iUXVlc3Rpb25zKys7XG4gICAgICAgICAgICAgICAgICAgIGlmKGdvb2RSZXNwb25zZSkgLy8gcsOpc3VsdGF0IGRlIGxhIHF1ZXN0aW9uIHByw6ljw6lkZW50ZVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMrKztcbiAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPXRydWU7Ly8gcsOpcG9uc2UgYm9ubmUganVzcXUnw6AgbGEgcHJlbWnDqHJlIGVycmV1ci4uLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW2l0ZW1dPT1cInRydWVcIilcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VfXCIraWRDaG9pY2UpLnBhcmVudE5vZGUuY2xhc3NMaXN0LmFkZChcImlzQ29ycmVjdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodXNlclJlc3BvbnNlc1tcInJlc3BvbnNlX1wiK2lkQ2hvaWNlXT09PXVuZGVmaW5lZCkvLyB1bmUgYm9ubmUgcsOpcG9uc2UgbidhIHBhcyDDqXTDqSBzw6lsZWN0aW9ubsOpZVxuICAgICAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPWZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdPT09XCJvblwiKS8vIHLDqXBvbnNlIGNvY2jDqWUgbmUgZmFpc2FudCBwYXMgcGFydGllIGRlcyBib25uZXNcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPWZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZV9cIitpZENob2ljZSkucGFyZW50Tm9kZS5jbGFzc0xpc3QuYWRkKFwiaXNOb3RDb3JyZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNpIGonYWkgYmllbiByw6lwb25kdSDDoCBsYSBkZXJuacOocmUgcXVlc3Rpb24sIGlsIGZhdXQgbGUgY29tcHRlciBpY2ksIGNhciBqZSBzdWlzIHNvcnRpIGRlIGxhIGJvdWNsZSA6XG4gICAgICAgIGlmKGdvb2RSZXNwb25zZSlcbiAgICAgICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKys7XG5cbiAgICAgICAgLy8gQWZmaWNoYWdlIGR1IHLDqXN1bHRhdCwgc3VpdmFudCBzaSBsJ3V0aWxpc2F0ZXVyIGVzdCBjb25uZWN0w6kgb3UgcGFzIGV0IHNvbiBzY29yZSA6XG4gICAgICAgIGxldCBnZXRPdXB1dD1jaGVja0Fuc3dlck91cHV0KGFuc3dlcik7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIGVzdCBjb25uZWN0w6ksIG9uIGVucmVnaXN0cmUgc29uIHLDqXN1bHRhdCBzdXIgbGUgc2VydmV1ci5cbiAgICAgICAgICAgIGNvbnN0IHhoclNhdmVBbnN3ZXIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhoclNhdmVBbnN3ZXIub3BlbihcIlBPU1RcIiwgYXBpVXJsK3F1ZXN0aW9ubmFpcmVSb3V0ZXMrc2F2ZUFuc3dlcnNSb3V0ZSk7XG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgeGhyUmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAxICYmICh4aHJSZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3VwdXQrPVwiPGJyPlwiK3hoclJlc3BvbnNlLm1lc3NhZ2UucmVwbGFjZShcIiNVUkxcIiwgY29uZmlnVGVtcGxhdGUudXNlckhvbWVQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrUHJldmlvdXNSZXNwb25zZXModXNlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3VwdXQrPVwiPGJyPlwiK3Jlc3BvbnNlU2F2ZWRFcnJvci5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAvLyBvbiByZWRpcmlnZSB2ZXJzIGxlIHLDqXN1bHRhdFxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZXJlPXdpbmRvdy5sb2NhdGlvbjsvLyB3aW5kb3cubG9jYXRpb24gw6AgYWpvdXRlciBwb3VyIG5lIHBhcyBxdWl0dGVyIGxhIHBhZ2UgZW4gbW9kZSBcInByZXZpZXdcIi4uLlxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGhlcmUrXCJleHBsYW5hdGlvbnNcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgIHhoclNhdmVBbnN3ZXIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICBhbnN3ZXIudGltZURpZmZlcmVuY2U9Z2V0VGltZURpZmZlcmVuY2UoKTsvLyBvbiBlbiBwcm9maXRlIHBvdXIgbWV0dHJlIGxlcyBwZW5kdWxlcyDDoCBsJ2hldXJlLlxuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5zZW5kKEpTT04uc3RyaW5naWZ5KGFuc3dlcikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgeyAgIC8vIHNpIHBhcyBjb25uZWN0w6ksIG9uIGVucmVnaXN0cmUgbGUgcsOpc3VsdGF0IGPDtHTDqSBjbGllbnQgcG91ciBwZXJtZXR0cmUgZGUgbGUgcmV0cm91dmVyIGF1IG1vbWVudCBkZSBsYSBjcsOpYXRpb24gZHUgY29tcHRlIG91IGRlIGxhIGNvbm5leGlvbi5cbiAgICAgICAgICAgIGlmKHNhdmVBbnN3ZXIoYW5zd2VyKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgZ2V0T3VwdXQrPVwiPGJyPjxicj5cIit3YW50VG9TYXZlUmVzcG9uc2VzO1xuICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgZ2V0T3VwdXQsIFwiXCIsIFtcImluZm9cIl0pO1xuICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnN1YnNjcmliZUJ0bnNcIikuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIC8vIGludXRpbGUgZGUgcHJvcG9zZXIgZGUgY3LDqWVyIHVuIGNvbXB0ZSBzaSBsZSBzdG9ja2FnZSBsb2NhbCBuZSBmb25jdGlvbm5lIHBhc1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBnZXRPdXB1dCwgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAvLyBvbiByZWRpcmlnZSB2ZXJzIGxlIHLDqXN1bHRhdFxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjtcbiAgICAgICAgICAgIGNvbnN0IGhlcmU9d2luZG93LmxvY2F0aW9uOy8vIHdpbmRvdy5sb2NhdGlvbiDDoCBham91dGVyIHBvdXIgbmUgcGFzIHF1aXR0ZXIgbGEgcGFnZSBlbiBtb2RlIFwicHJldmlld1wiLi4uXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGhlcmUrXCJyZXNwb25zZVwiKTsgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIC8vICsgYWZmaWNoYWdlIGRlcyB0ZXh0ZXMgZCdleHBsaWNhdGlvbnMgcG91ciBjaGFxdWUgcXVlc3Rpb25cbiAgICAgICAgY29uc3QgZXhwbGFuYXRpb25zPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuaGVscFwiKTtcbiAgICAgICAgZm9yKGxldCBpIGluIGV4cGxhbmF0aW9ucylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoZXhwbGFuYXRpb25zW2ldLnN0eWxlIT11bmRlZmluZWQpIC8vIHNpbm9uLCBsYSBjb25zb2xlIGFmZmljaGUgdW5lIGVycmV1ciBcIlR5cGVFcnJvcjogZXhwbGFuYXRpb25zW2ldLnN0eWxlIGlzIHVuZGVmaW5lZFwiLCBiaWVuIHF1ZSB0b3V0IGZvbmN0aW9ubmUgKD8pXG4gICAgICAgICAgICAgICAgZXhwbGFuYXRpb25zW2ldLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59KVxuXG4vLyBGb25jdGlvbiB2w6lyaWZpYW50IGxlcyBwcsOpY8OpZGVudGVzIHLDqXBvbnNlcyBkZSBsJ3V0aWxpc2F0ZXVyXG4vLyBVdGlsZSBzaSBjb25uZWN0w6kgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQgZGUgbGEgcGFnZSwgcHVpcyBhcHLDqHMgdW5lIG5vdXZlbGxlIHLDqXBvbnNlXG5jb25zdCBjaGVja1ByZXZpb3VzUmVzcG9uc2VzID0gKHVzZXIpID0+XG57XG4gICAgY29uc3QgeGhyUHJldmlvdXNSZXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHJQcmV2aW91c1Jlcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtxdWVzdGlvbm5haXJlUm91dGVzK2dldFByZXZpb3VzQW5zd2Vycyt1c2VyLmlkK1wiL1wiK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZUlkXCIpLnZhbHVlKTtcbiAgICB4aHJQcmV2aW91c1Jlcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5iUmVzcG9uc2VzPXJlc3BvbnNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNBbnN3ZXJzQ29udGVudD1cIlwiO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zVGl0bGUsIFwic3BhblwiLCBwcmV2aW91c0Fuc3dlcnNUaXRsZS5yZXBsYWNlKFwiI05PTVwiLCB1c2VyLm5hbWUpKTtcbiAgICAgICAgICAgICAgICBpZihuYlJlc3BvbnNlcyE9PTApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG90TmJRdWVzdGlvbnM9MCwgdG90TmJDb3JyZWN0QW5zd2Vycz0wLCB0b3REdXJhdGlvbj0wLCBtYXBMaW5lQ29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3ROYlF1ZXN0aW9ucys9cmVzcG9uc2VbaV0ubmJRdWVzdGlvbnM7Ly8gISBvbiBuZSBwZXV0IHNlIGJhc2VyIHN1ciBsYSB2ZXJzaW9uIGFjdHVlbGxlIGR1IHF1aXosIGNhciBsZSBub21icmUgZGUgcXVlc3Rpb25zIGEgcHUgw6l2b2x1ZXIuXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3ROYkNvcnJlY3RBbnN3ZXJzKz1yZXNwb25zZVtpXS5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90RHVyYXRpb24rPXJlc3BvbnNlW2ldLmR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwTGluZUNvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVBTlNXRVIgOiBkYXRlRm9ybWF0KHJlc3BvbnNlW2ldLmNyZWF0ZWRBdCwgbGFuZyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJDT1JSRUNUQU5TV0VSUyA6IHJlc3BvbnNlW2ldLm5iQ29ycmVjdEFuc3dlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJRVUVTVElPTlMgOiByZXNwb25zZVtpXS5uYlF1ZXN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkdEVVJBVElPTiA6IHJlc3BvbnNlW2ldLmR1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbnN3ZXJzQ29udGVudCs9XCI8bGk+XCIrcmVwbGFjZUFsbChwcmV2aW91c0Fuc3dlcnNMaW5lLCBtYXBMaW5lQ29udGVudCkrXCI8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hcExpbmVDb250ZW50ID1cbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgQVZHRFVSQVRJT04gOiBNYXRoLnJvdW5kKHRvdER1cmF0aW9uL25iUmVzcG9uc2VzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFWR0NPUlJFQ1RBTlNXRVJTIDogTWF0aC5yb3VuZCh0b3ROYkNvcnJlY3RBbnN3ZXJzL3RvdE5iUXVlc3Rpb25zKjEwMClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbnN3ZXJzQ29udGVudD1cIjxoNT5cIityZXBsYWNlQWxsKHByZXZpb3VzQW5zd2Vyc1N0YXRzLCBtYXBMaW5lQ29udGVudCkrXCI8L2g1PlwiK3ByZXZpb3VzQW5zd2Vyc0NvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zQ29udGVudCwgXCJ1bFwiLCBwcmV2aW91c0Fuc3dlcnNDb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGV4cGxhbmF0aW9uc0NvbnRlbnQsIFwidWxcIiwgbm9QcmV2aW91c0Fuc3dlcik7XG4gICAgICAgICAgICAgICAgLy8gZGFucyB1biBjYXMgY29tbWUgZGFucyBsJ2F1dHJlLCBib3V0b24gcG91ciByZXZlbmlyIMOgIGwnYWNjdWVpbCBkdSBjb21wdGVcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGV4cGxhbmF0aW9uc0NvbnRlbnQsIFwicFwiLCBcIjxhIGhyZWY9XFxcIi9cIitjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2UrXCJcXFwiIGNsYXNzPVxcXCJidXR0b24gY2FyZGJvYXJkXFxcIj5cIitjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2VUeHQrXCI8L2E+XCIsIFwiXCIsIFtcImJ0blwiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHhoclByZXZpb3VzUmVzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgIHhoclByZXZpb3VzUmVzLnNlbmQoKTtcbn0iLCJjb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi9jb25maWcvZ2VuZXJhbFwiKTtcblxuaW1wb3J0IHsgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vLi4vbGFuZy9cIitjb25maWdGcm9udEVuZC5sYW5nK1wiL2Fuc3dlclwiKTtcblxuLy8gRW5yZWdpc3RyZW1lbnQgY8O0dMOpIGNsaWVudCBkdSBkZXJuaWVyIHLDqXN1bHRhdCDDoCB1biBxdWl6IGVuIGF0dGVuZGFudCBkJ8OqdHJlIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IHNhdmVBbnN3ZXIgPSAoYW5zd2VyKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAge1xuICAgICAgICBzYXZlTG9jYWx5KFwibGFzdEFuc3dlclwiLCBhbnN3ZXIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIFJldG91cm5lIHVuIHRleHRlIHN1aXZhbnQgbGUgbm9tYnJlIGRlIGJvbm5lcyByw6lwb25zZXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlck91cHV0ID0gKGFuc3dlcikgPT5cbntcbiAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmF0aW89YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMvYW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICBjb25zdCBtYXBPYmo9XG4gICAgICAgIHtcbiAgICAgICAgICAgIERVUkFUSU9OOiBhbnN3ZXIuZHVyYXRpb24sXG4gICAgICAgICAgICBOQkNPUlJFQ1RBTlNXRVJTOiBhbnN3ZXIubmJDb3JyZWN0QW5zd2VycyxcbiAgICAgICAgICAgIE5CUVVFU1RJT05TOiBhbnN3ZXIubmJRdWVzdGlvbnNcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3V0cHV0PVwiXCI7XG4gICAgICAgIGlmKHJhdGlvIDwgMC40KVxuICAgICAgICAgICAgb3V0cHV0PXJlcGxhY2VBbGwodHh0LmNoZWNrUmVzcG9uc2VzT3VwdXRGYWlsLCBtYXBPYmopO1xuICAgICAgICBlbHNlIGlmKHJhdGlvIDwgMC44KVxuICAgICAgICAgICAgb3V0cHV0PXJlcGxhY2VBbGwodHh0LmNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0sIG1hcE9iaik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG91dHB1dD1yZXBsYWNlQWxsKHR4dC5jaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcywgbWFwT2JqKTtcbiAgICAgICAgaWYob3V0cHV0KVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIFwiXCI7XG59IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/subscribe.app.js b/front/public/JS/subscribe.app.js index eeed01b..bdd59d6 100644 --- a/front/public/JS/subscribe.app.js +++ b/front/public/JS/subscribe.app.js @@ -974,22 +974,18 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_forms_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/forms.js */ "./src/tools/forms.js"); /* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/matomo.js */ "./src/tools/matomo.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DU FORMULAIRE PERMETTANT DE CRÉER SON COMPTE /// L'utilisateur peut avoir répondu à un quiz avant d'arriver sur la page d'inscription /// Des ce cas il faut enregistrer son résultat en même temps que les premières informations de son compte (email, ok CGU) /// Les infos du compte sont complétées (mot de passe, code parrain...) au moment de la validation. // Fichier de configuration tirés du backend : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // besoin de toutes les déclarations, car appel dynamique : configTemplate[homePage] +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); // besoin de toutes les déclarations, car appel dynamique : configTemplate[homePage] -var configUsers = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // idem pour configurer formulaire +const configUsers = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // idem pour configurer formulaire // Importation des fonctions utiles au script : @@ -1000,81 +996,56 @@ var configUsers = __webpack_require__(/*! ../../config/users */ "../config/users // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require.serverError; +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - alreadyConnected = _require2.alreadyConnected, - needUniqueEmail = _require2.needUniqueEmail; // Principaux éléments du DOM manipulés : +const { + alreadyConnected, + needUniqueEmail +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); // Principaux éléments du DOM manipulés : -var btnSubmit = document.getElementById("submitDatas"); -var divResponse = document.getElementById("response"); -var emailInput = document.getElementById("email"); -var myForm = document.getElementById("subscription"); // Test de connexion de l'utilisateur + affichage formulaire d'inscription. +const btnSubmit = document.getElementById("submitDatas"); +const divResponse = document.getElementById("response"); +const emailInput = document.getElementById("email"); +const myForm = document.getElementById("subscription"); // Test de connexion de l'utilisateur + affichage formulaire d'inscription. -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(); +const initialise = async () => { + try { + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(); - case 3: - isConnected = _context.sent; - - if (isConnected) { - // on change le lien d'accès au compte - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); - myForm.style.display = "block"; - myForm.innerHTML = "

    " + alreadyConnected + "

    "; - } else { - Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_5__["loadMatomo"])(); - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, myForm); - myForm.style.display = "block"; - } - - _context.next = 11; - break; - - case 7: - _context.prev = 7; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - console.error(_context.t0); - - case 11: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 7]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + if (isConnected) { + // on change le lien d'accès au compte + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configTemplate); + myForm.style.display = "block"; + myForm.innerHTML = "

    " + alreadyConnected + "

    "; + } else { + Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_5__["loadMatomo"])(); + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, myForm); + myForm.style.display = "block"; + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + console.error(e); + } +}; initialise(); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); // Teste si l'e-mail saisi est déjà utilisé par un autre compte. // Si c'est le cas, la validation du formulaire est bloquée. emailInput.addEventListener("blur", function (e) { - var emailValue = emailInput.value.trim(); + const emailValue = emailInput.value.trim(); if (emailValue !== "") { - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.checkIfIsEmailfreeRoute); xhr.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 200 && response.free !== undefined && response.free === false) { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("emailMessage"), "div", needUniqueEmail.replace("#URL", configTemplate.connectionPage), "", ["error"]); @@ -1084,7 +1055,7 @@ emailInput.addEventListener("blur", function (e) { }; xhr.setRequestHeader("Content-Type", "application/json"); - var datas = { + const datas = { emailTest: emailValue }; xhr.send(JSON.stringify(datas)); @@ -1098,12 +1069,12 @@ emailInput.addEventListener("focus", function (e) { myForm.addEventListener("submit", function (e) { try { e.preventDefault(); - var xhr = new XMLHttpRequest(); + const xhr = new XMLHttpRequest(); xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.subscribeRoute); xhr.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + let response = JSON.parse(this.responseText); if (this.status === 201) { myForm.style.display = "none"; @@ -1117,7 +1088,7 @@ myForm.addEventListener("submit", function (e) { }; xhr.setRequestHeader("Content-Type", "application/json"); - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(myForm); + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(myForm); if (datas) { datas.timeDifference = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["getTimeDifference"])(configUsers); // Si l'utilisateur a précédement répondu à un quiz, j'ajoute les infos de son résultat : @@ -1147,14 +1118,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1172,32 +1142,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1221,13 +1180,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1248,25 +1207,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1274,49 +1225,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1337,7 +1266,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__); // Fonction chargeant le code matomo -var loadMatomo = function loadMatomo() { +const loadMatomo = () => { // chargement de matomo var _paq = window._paq = window._paq || []; //ajout cnil : @@ -1403,27 +1332,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1432,11 +1357,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1450,96 +1375,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1548,4 +1445,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9zdWJzY3JpYmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJjb25maWdVc2VycyIsImJ0blN1Ym1pdCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZSZXNwb25zZSIsImVtYWlsSW5wdXQiLCJteUZvcm0iLCJpbml0aWFsaXNlIiwiY2hlY2tTZXNzaW9uIiwiaXNDb25uZWN0ZWQiLCJ1c2VyIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJzdHlsZSIsImRpc3BsYXkiLCJpbm5lckhUTUwiLCJsb2FkTWF0b21vIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiYWRkRWxlbWVudCIsImNvbnNvbGUiLCJlcnJvciIsImhlbGxvRGV2IiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJlbWFpbFZhbHVlIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsImZyZWUiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiZGF0YXMiLCJlbWFpbFRlc3QiLCJzZW5kIiwic3RyaW5naWZ5IiwicHJldmVudERlZmF1bHQiLCJtZXNzYWdlIiwicmVtb3ZlTG9jYWx5IiwiZXJyb3JzIiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwidGltZURpZmZlcmVuY2UiLCJnZXRUaW1lRGlmZmVyZW5jZSIsImNoZWNrQW5zd2VyRGF0YXMiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJhcHBlbmRDaGlsZCIsImxvZyIsImxpbmsiLCJob21lUGFnZSIsImlucHV0c0NvbmYiLCJlbGVtZW50cyIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsImVtcHlGb3JtIiwidHlwZSIsImNoZWNrZWQiLCJlbXB5QW5kSGlkZUZvcm0iLCJfcGFxIiwid2luZG93IiwicHVzaCIsInNlbGYiLCJnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0Iiwibm93Iiwibm93VHMiLCJyb3VuZCIsImdldFRpbWUiLCJ2aXNpdG9ySW5mbyIsImdldFZpc2l0b3JJbmZvIiwiY3JlYXRlVHMiLCJwYXJzZUludCIsImNvb2tpZVRpbWVvdXQiLCJvcmlnaW5hbFRpbWVvdXQiLCJzZXRWaXNpdG9yQ29va2llVGltZW91dCIsInUiLCJkIiwiZyIsInMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJsb2NhdGlvbiIsImluZGV4T2YiLCJhc3NpZ24iLCJvbmVy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QUN1TixjQUFELENBQVgsRUFDSXRDLE1BQU0sQ0FBQ2tELFFBQVAsQ0FBZ0JFLE1BQWhCLENBQXVCZCxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL3N1YnNjcmliZS5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9zdWJzY3JpYmUuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwiLy8gU2kgbm9uIHV0aWxpc8OpLCBzdXBwcmltZXIgbCdhcHBlbCBkZXMgSlMgZnJvbnQtZW5kIHB1aXMgcmVjb21waWxlci5cbi8vIFJldm9pciBjb21tZW50IHLDqW9yZ2FuaXNlciBjZWxhIHNvdXMtZm9ybWUgZGUgbW9kdWxlIGluZMOpcGVuZGFudC5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBTdGF0cyBNYXRvbW8gOlxuICAgIG1hdG9tbzogeyB1cmw6IFwiaHR0cHM6Ly9zdGF0cy5sZS1mYWItbGFiLmNvbS9cIiwgc2l0ZUlkOiBcIjVcIiB9LFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgQ1LDiUVSIFNPTiBDT01QVEVcblxuLy8vIEwndXRpbGlzYXRldXIgcGV1dCBhdm9pciByw6lwb25kdSDDoCB1biBxdWl6IGF2YW50IGQnYXJyaXZlciBzdXIgbGEgcGFnZSBkJ2luc2NyaXB0aW9uXG4vLy8gRGVzIGNlIGNhcyBpbCBmYXV0IGVucmVnaXN0cmVyIHNvbiByw6lzdWx0YXQgZW4gbcOqbWUgdGVtcHMgcXVlIGxlcyBwcmVtacOocmVzIGluZm9ybWF0aW9ucyBkZSBzb24gY29tcHRlIChlbWFpbCwgb2sgQ0dVKVxuLy8vIExlcyBpbmZvcyBkdSBjb21wdGUgc29udCBjb21wbMOpdMOpZXMgKG1vdCBkZSBwYXNzZSwgY29kZSBwYXJyYWluLi4uKSBhdSBtb21lbnQgZGUgbGEgdmFsaWRhdGlvbi5cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIHRpcsOpcyBkdSBiYWNrZW5kIDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7Ly8gYmVzb2luIGRlIHRvdXRlcyBsZXMgZMOpY2xhcmF0aW9ucywgY2FyIGFwcGVsIGR5bmFtaXF1ZSA6IGNvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXVxuY29uc3QgY29uZmlnVXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL3VzZXJzXCIpOy8vIGlkZW0gcG91ciBjb25maWd1cmVyIGZvcm11bGFpcmVcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgbG9hZE1hdG9tbyB9IGZyb20gXCIuL3Rvb2xzL21hdG9tby5qc1wiO1xuaW1wb3J0IHsgY2hlY2tBbnN3ZXJEYXRhcywgY2hlY2tTZXNzaW9uLCBnZXRUaW1lRGlmZmVyZW5jZSB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBhbHJlYWR5Q29ubmVjdGVkLCBuZWVkVW5pcXVlRW1haWwgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGJ0blN1Ym1pdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1Ym1pdERhdGFzXCIpO1xuY29uc3QgZGl2UmVzcG9uc2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IGVtYWlsSW5wdXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbWFpbFwiKTtcbmNvbnN0IG15Rm9ybT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1YnNjcmlwdGlvblwiKTtcblxuLy8gVGVzdCBkZSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciArIGFmZmljaGFnZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24uXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbigpO1xuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb24gY2hhbmdlIGxlIGxpZW4gZCdhY2PDqHMgYXUgY29tcHRlXG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICAgICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgbXlGb3JtLmlubmVySFRNTD1cIjxwIGNsYXNzPSdpbmZvJz5cIithbHJlYWR5Q29ubmVjdGVkK1wiPC9wPlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbG9hZE1hdG9tbygpO1xuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1VzZXJzLCBteUZvcm0pO1xuICAgICAgICAgICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7XG5oZWxsb0RldigpO1xuXG4vLyBUZXN0ZSBzaSBsJ2UtbWFpbCBzYWlzaSBlc3QgZMOpasOgIHV0aWxpc8OpIHBhciB1biBhdXRyZSBjb21wdGUuXG4vLyBTaSBjJ2VzdCBsZSBjYXMsIGxhIHZhbGlkYXRpb24gZHUgZm9ybXVsYWlyZSBlc3QgYmxvcXXDqWUuXG5lbWFpbElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgY29uc3QgZW1haWxWYWx1ZT1lbWFpbElucHV0LnZhbHVlLnRyaW0oKTtcbiAgICBpZihlbWFpbFZhbHVlIT09XCJcIilcbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrY29uZmlnVXNlcnMuY2hlY2tJZklzRW1haWxmcmVlUm91dGUpO1xuICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmZyZWUgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5mcmVlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbWFpbE1lc3NhZ2VcIiksIFwiZGl2XCIsIG5lZWRVbmlxdWVFbWFpbC5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIGNvbnN0IGRhdGFzPXsgZW1haWxUZXN0OmVtYWlsVmFsdWUgfTtcbiAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICB9XG59KTtcbi8vIFN1cHByaW1lIGwnw6l2ZW50dWVsIG1lc3NhZ2UgZCdlcnJldXIgZMOpasOgIGluamVjdMOpIHNpIGwndXRpbGlzYXRldXIgcmV2aWVudCBkYW5zIGxlIGNoYW1wIDpcbmVtYWlsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbWFpbE1lc3NhZ2VcIikuaW5uZXJIVE1MPVwiXCI7XG59KTtcblxuLy8gVHJhaXRlbWVudCBkZSBsJ2Vudm9pIGRlcyBkb25uw6llcyBkJ2luc2NyaXB0aW9uIDpcbm15Rm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAgICAgICBcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5zdWJzY3JpYmVSb3V0ZSk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJsYXN0QW5zd2VyXCIpOy8vICEgaW1wb3J0YW50IHBvdXIgbmUgcGFzIGVucmVnaXN0ZXIgcGx1c2lldXJzIGZvaXMgbGUgcsOpc3VsdGF0LlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMobXlGb3JtKTtcbiAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLnRpbWVEaWZmZXJlbmNlPWdldFRpbWVEaWZmZXJlbmNlKGNvbmZpZ1VzZXJzKTtcbiAgICAgICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgYSBwcsOpY8OpZGVtZW50IHLDqXBvbmR1IMOgIHVuIHF1aXosIGonYWpvdXRlIGxlcyBpbmZvcyBkZSBzb24gcsOpc3VsdGF0IDpcbiAgICAgICAgICAgIGRhdGFzPWNoZWNrQW5zd2VyRGF0YXMoZGF0YXMpO1xuICAgICAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufSk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9zdWJzY3JpYmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJjb25maWdVc2VycyIsImJ0blN1Ym1pdCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZSZXNwb25zZSIsImVtYWlsSW5wdXQiLCJteUZvcm0iLCJpbml0aWFsaXNlIiwiaXNDb25uZWN0ZWQiLCJjaGVja1Nlc3Npb24iLCJ1c2VyIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJzdHlsZSIsImRpc3BsYXkiLCJpbm5lckhUTUwiLCJsb2FkTWF0b21vIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiZSIsImFkZEVsZW1lbnQiLCJjb25zb2xlIiwiZXJyb3IiLCJoZWxsb0RldiIsImFkZEV2ZW50TGlzdGVuZXIiLCJlbWFpbFZhbHVlIiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsImZyZWUiLCJzZXRBdHRyaWJ1dGUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiZGF0YXMiLCJlbWFpbFRlc3QiLCJzZW5kIiwic3RyaW5naWZ5IiwicHJldmVudERlZmF1bHQiLCJtZXNzYWdlIiwicmVtb3ZlTG9jYWx5IiwiZXJyb3JzIiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwidGltZURpZmZlcmVuY2UiLCJnZXRUaW1lRGlmZmVyZW5jZSIsImNoZWNrQW5zd2VyRGF0YXMiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJhcHBlbmRDaGlsZCIsImxvZyIsImxpbmsiLCJob21lUGFnZSIsImlucHV0c0NvbmYiLCJlbGVtZW50cyIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllIiwiZW50cmllcyIsImVtcHlGb3JtIiwidHlwZSIsImNoZWNrZWQiLCJlbXB5QW5kSGlkZUZvcm0iLCJfcGFxIiwid2luZG93IiwicHVzaCIsInNlbGYiLCJnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0Iiwibm93Iiwibm93VHMiLCJyb3VuZCIsImdldFRpbWUiLCJ2aXNpdG9ySW5mbyIsImdldFZpc2l0b3JJbmZvIiwiY3JlYXRlVHMiLCJwYXJzZUludCIsImNvb2tpZVRpbWVvdXQiLCJvcmlnaW5hbFRpbWVvdXQiLCJzZXRWaXNpdG9yQ29va2llVGltZW91dCIsInUiLCJkIiwiZyIsInMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0Iiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJsb2NhdGlvbiIsImluZGV4T2YiLCJhc3NpZ24iLCJvbmVy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QUMsTUFBRCxDQUFaO0FBQ0F3Rix3QkFBWSxDQUFDTixjQUFELEVBQWlCbkYsT0FBakIsRUFBMEJvRixTQUExQixDQUFaO0FBQ0FFLG1CQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixTQTVDRDs7QUE2Q0F6RyxXQUFHLENBQUNxSCxPQUFKLEdBQWMsTUFBTVgsTUFBTSxDQUFDMUcsR0FBRyxDQUFDc0gsVUFBTCxDQUExQjs7QUFDQXRILFdBQUcsQ0FBQ2dCLElBQUo7QUFDSDtBQUNKO0FBQ0osR0F0RU0sQ0FBUDtBQXVFSCxDQXpFTSxDLENBMEVQOztBQUNBLE1BQU00RixZQUFZLEdBQUcsQ0FBQ04sY0FBRCxFQUFpQm5GLE9BQWpCLEVBQTBCb0YsU0FBMUIsS0FDckI7QUFDSSxNQUFHLENBQUN4TiwyREFBTyxDQUFDb0ksT0FBRCxDQUFYLEVBQ0lPLG9FQUFVLENBQUMsU0FBRCxFQUFZUCxPQUFaLENBQVY7QUFDSixNQUFHLENBQUNwSSwyREFBTyxDQUFDd04sU0FBRCxDQUFYLEVBQ0k3RSxvRUFBVSxDQUFDLEtBQUQsRUFBUTZFLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ3hOLDJEQUFPLENBQUN1TixjQUFELENBQVgsRUFDSXRDLE1BQU0sQ0FBQ2tELFFBQVAsQ0FBZ0JFLE1BQWhCLENBQXVCZCxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL3N1YnNjcmliZS5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9zdWJzY3JpYmUuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwiLy8gU2kgbm9uIHV0aWxpc8OpLCBzdXBwcmltZXIgbCdhcHBlbCBkZXMgSlMgZnJvbnQtZW5kIHB1aXMgcmVjb21waWxlci5cbi8vIFJldm9pciBjb21tZW50IHLDqW9yZ2FuaXNlciBjZWxhIHNvdXMtZm9ybWUgZGUgbW9kdWxlIGluZMOpcGVuZGFudC5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBTdGF0cyBNYXRvbW8gOlxuICAgIG1hdG9tbzogeyB1cmw6IFwiaHR0cHM6Ly9zdGF0cy5sZS1mYWItbGFiLmNvbS9cIiwgc2l0ZUlkOiBcIjVcIiB9LFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgQ1LDiUVSIFNPTiBDT01QVEVcblxuLy8vIEwndXRpbGlzYXRldXIgcGV1dCBhdm9pciByw6lwb25kdSDDoCB1biBxdWl6IGF2YW50IGQnYXJyaXZlciBzdXIgbGEgcGFnZSBkJ2luc2NyaXB0aW9uXG4vLy8gRGVzIGNlIGNhcyBpbCBmYXV0IGVucmVnaXN0cmVyIHNvbiByw6lzdWx0YXQgZW4gbcOqbWUgdGVtcHMgcXVlIGxlcyBwcmVtacOocmVzIGluZm9ybWF0aW9ucyBkZSBzb24gY29tcHRlIChlbWFpbCwgb2sgQ0dVKVxuLy8vIExlcyBpbmZvcyBkdSBjb21wdGUgc29udCBjb21wbMOpdMOpZXMgKG1vdCBkZSBwYXNzZSwgY29kZSBwYXJyYWluLi4uKSBhdSBtb21lbnQgZGUgbGEgdmFsaWRhdGlvbi5cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIHRpcsOpcyBkdSBiYWNrZW5kIDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7Ly8gYmVzb2luIGRlIHRvdXRlcyBsZXMgZMOpY2xhcmF0aW9ucywgY2FyIGFwcGVsIGR5bmFtaXF1ZSA6IGNvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXVxuY29uc3QgY29uZmlnVXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vY29uZmlnL3VzZXJzXCIpOy8vIGlkZW0gcG91ciBjb25maWd1cmVyIGZvcm11bGFpcmVcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgbG9hZE1hdG9tbyB9IGZyb20gXCIuL3Rvb2xzL21hdG9tby5qc1wiO1xuaW1wb3J0IHsgY2hlY2tBbnN3ZXJEYXRhcywgY2hlY2tTZXNzaW9uLCBnZXRUaW1lRGlmZmVyZW5jZSB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyBhbHJlYWR5Q29ubmVjdGVkLCBuZWVkVW5pcXVlRW1haWwgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGJ0blN1Ym1pdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1Ym1pdERhdGFzXCIpO1xuY29uc3QgZGl2UmVzcG9uc2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IGVtYWlsSW5wdXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbWFpbFwiKTtcbmNvbnN0IG15Rm9ybT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN1YnNjcmlwdGlvblwiKTtcblxuLy8gVGVzdCBkZSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciArIGFmZmljaGFnZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24uXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbigpO1xuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gb24gY2hhbmdlIGxlIGxpZW4gZCdhY2PDqHMgYXUgY29tcHRlXG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICAgICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgbXlGb3JtLmlubmVySFRNTD1cIjxwIGNsYXNzPSdpbmZvJz5cIithbHJlYWR5Q29ubmVjdGVkK1wiPC9wPlwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbG9hZE1hdG9tbygpO1xuICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1VzZXJzLCBteUZvcm0pO1xuICAgICAgICAgICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7XG5oZWxsb0RldigpO1xuXG4vLyBUZXN0ZSBzaSBsJ2UtbWFpbCBzYWlzaSBlc3QgZMOpasOgIHV0aWxpc8OpIHBhciB1biBhdXRyZSBjb21wdGUuXG4vLyBTaSBjJ2VzdCBsZSBjYXMsIGxhIHZhbGlkYXRpb24gZHUgZm9ybXVsYWlyZSBlc3QgYmxvcXXDqWUuXG5lbWFpbElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgY29uc3QgZW1haWxWYWx1ZT1lbWFpbElucHV0LnZhbHVlLnRyaW0oKTtcbiAgICBpZihlbWFpbFZhbHVlIT09XCJcIilcbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrY29uZmlnVXNlcnMuY2hlY2tJZklzRW1haWxmcmVlUm91dGUpO1xuICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmZyZWUgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5mcmVlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbWFpbE1lc3NhZ2VcIiksIFwiZGl2XCIsIG5lZWRVbmlxdWVFbWFpbC5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIGNvbnN0IGRhdGFzPXsgZW1haWxUZXN0OmVtYWlsVmFsdWUgfTtcbiAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICB9XG59KTtcbi8vIFN1cHByaW1lIGwnw6l2ZW50dWVsIG1lc3NhZ2UgZCdlcnJldXIgZMOpasOgIGluamVjdMOpIHNpIGwndXRpbGlzYXRldXIgcmV2aWVudCBkYW5zIGxlIGNoYW1wIDpcbmVtYWlsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbWFpbE1lc3NhZ2VcIikuaW5uZXJIVE1MPVwiXCI7XG59KTtcblxuLy8gVHJhaXRlbWVudCBkZSBsJ2Vudm9pIGRlcyBkb25uw6llcyBkJ2luc2NyaXB0aW9uIDpcbm15Rm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAgICAgICBcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5zdWJzY3JpYmVSb3V0ZSk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJsYXN0QW5zd2VyXCIpOy8vICEgaW1wb3J0YW50IHBvdXIgbmUgcGFzIGVucmVnaXN0ZXIgcGx1c2lldXJzIGZvaXMgbGUgcsOpc3VsdGF0LlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMobXlGb3JtKTtcbiAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLnRpbWVEaWZmZXJlbmNlPWdldFRpbWVEaWZmZXJlbmNlKGNvbmZpZ1VzZXJzKTtcbiAgICAgICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgYSBwcsOpY8OpZGVtZW50IHLDqXBvbmR1IMOgIHVuIHF1aXosIGonYWpvdXRlIGxlcyBpbmZvcyBkZSBzb24gcsOpc3VsdGF0IDpcbiAgICAgICAgICAgIGRhdGFzPWNoZWNrQW5zd2VyRGF0YXMoZGF0YXMpO1xuICAgICAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufSk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/subscribeValidation.app.js b/front/public/JS/subscribeValidation.app.js index 81cee59..46cb916 100644 --- a/front/public/JS/subscribeValidation.app.js +++ b/front/public/JS/subscribeValidation.app.js @@ -977,10 +977,6 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_matomo_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/matomo.js */ "./src/tools/matomo.js"); /* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- PAGE PERMETTANT DE VALIDER LA CRÉATION DE SON COMPTE, PUIS DE COMPLÉTER SON INSCRIPTION /// Un token est transmis en paramètre de l'Url. Il a une validité limité dans le temps. /// Si le token n'est pas/plus valide, on redirige l'utilisateur vers la page de connexion pour obtenir un nouveau lien. @@ -988,11 +984,11 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Si l'utilisateur a déjà une session active valide, c'est qu'il a déjà cliqué sur le lien. On le redirige vers sa page d'accueil. // Fichier de configuration tirés du backend : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var configUsers = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // besoin de tous le fichier pour configurer le formulaire de saisie, etc. +const configUsers = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // besoin de tous le fichier pour configurer le formulaire de saisie, etc. // Importation des fonctions utiles au script : @@ -1005,198 +1001,168 @@ var configUsers = __webpack_require__(/*! ../../config/users */ "../config/users // Dictionnaires : -var _require = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - notRequired = _require.notRequired, - serverError = _require.serverError; +const { + notRequired, + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require2 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"), - alreadyConnected = _require2.alreadyConnected, - badLinkValidationMessage = _require2.badLinkValidationMessage, - godfatherFound = _require2.godfatherFound, - godfatherNotFound = _require2.godfatherNotFound, - passwordCopied = _require2.passwordCopied, - validationMessage = _require2.validationMessage; // Principaux éléments du DOM manipulés : +const { + alreadyConnected, + badLinkValidationMessage, + godfatherFound, + godfatherNotFound, + passwordCopied, + validationMessage +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + lang + "/user"); // Principaux éléments du DOM manipulés : -var codeGodfatherInput = document.getElementById("codeGodfather"); -var divExplanations = document.getElementById("explanations"); -var divMessage = document.getElementById("message"); -var divResponse = document.getElementById("response"); -var formAccount = document.getElementById("subscription2"); -var passwordInput = document.getElementById("newPassword"); -var passwordLink = document.getElementById("getPassword"); -var passwordHelp = document.getElementById("passwordMessage"); +const codeGodfatherInput = document.getElementById("codeGodfather"); +const divExplanations = document.getElementById("explanations"); +const divMessage = document.getElementById("message"); +const divResponse = document.getElementById("response"); +const formAccount = document.getElementById("subscription2"); +const passwordInput = document.getElementById("newPassword"); +const passwordLink = document.getElementById("getPassword"); +const passwordHelp = document.getElementById("passwordMessage"); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, homePage, datas, xhr; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - // Explications cachées par défaut : - divExplanations.style.display = "none"; - _context.next = 4; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_8__["checkSession"])(); +const initialise = async () => { + try { + // Explications cachées par défaut : + divExplanations.style.display = "none"; + const isConnected = await Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_8__["checkSession"])(); - case 4: - isConnected = _context.sent; + if (isConnected) { + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["saveLocaly"])("message", { + message: alreadyConnected, + color: "info" + }); + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); + const homePage = user.status + "HomePage"; // lors de la création d'un compte, seul le statut "user" est possible. - if (isConnected) { - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["saveLocaly"])("message", { - message: alreadyConnected, - color: "info" - }); - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); - homePage = user.status + "HomePage"; // lors de la création d'un compte, seul le statut "user" est possible. + window.location.assign("/" + configTemplate[homePage]); + } else { + Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_6__["loadMatomo"])(); + const datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_7__["getUrlParams"])(); - window.location.assign("/" + configTemplate[homePage]); - } else { - Object(_tools_matomo_js__WEBPACK_IMPORTED_MODULE_6__["loadMatomo"])(); - datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_7__["getUrlParams"])(); + if (datas && datas.t !== undefined) { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.checkSubscribeTokenRoute + datas.t); - if (datas && datas.t !== undefined) { - xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.checkSubscribeTokenRoute + datas.t); + xhr.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); - xhr.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); + if (this.status === 200 && response.newUser != undefined && response.token != undefined) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", validationMessage, "", ["success"]); // Affichage et initialisation du formulaire permettant de compléter les infos : - if (this.status === 200 && response.newUser != undefined && response.token != undefined) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", validationMessage, "", ["success"]); // Affichage et initialisation du formulaire permettant de compléter les infos : + formAccount.style.display = "block"; + divExplanations.style.display = "block"; + Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, formAccount); // Affichage des infos déjà enregistrées : - formAccount.style.display = "block"; - divExplanations.style.display = "block"; - Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["setAttributesToInputs"])(configUsers, formAccount); // Affichage des infos déjà enregistrées : - - for (var data in response.newUser.User) { - if (formAccount.elements[data] !== undefined) formAccount.elements[data].value = response.newUser.User[data]; - } // Jours de réception de l'abonnenment : + for (let data in response.newUser.User) { + if (formAccount.elements[data] !== undefined) formAccount.elements[data].value = response.newUser.User[data]; + } // Jours de réception de l'abonnenment : - for (var i in response.newUser.Subscription.receiptDays) { - formAccount.elements["d" + response.newUser.Subscription.receiptDays[i]].checked = "checked"; - } // Certains navigateurs remplissent automatiquement les champs password : + for (let i in response.newUser.Subscription.receiptDays) formAccount.elements["d" + response.newUser.Subscription.receiptDays[i]].checked = "checked"; // Certains navigateurs remplissent automatiquement les champs password : - passwordInput.value = ""; // Création d'une session courte avec le token reçu (nécessaire pour la suite) : + passwordInput.value = ""; // Création d'une session courte avec le token reçu (nécessaire pour la suite) : - var connexionMaxTime = Date.now() + parseInt(_config_instance_js__WEBPACK_IMPORTED_MODULE_0__["tokenConnexionMinTimeInHours"], 10) * 3600 * 1000; - Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_8__["setSession"])(response.newUser.User.id, response.token, connexionMaxTime); - } else if ((this.status === 200 || this.status === 404) && response.errors != undefined) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", badLinkValidationMessage.replace("#URL", configTemplate.connectionPage), "", ["error"]); - } - }; + let connexionMaxTime = Date.now() + parseInt(_config_instance_js__WEBPACK_IMPORTED_MODULE_0__["tokenConnexionMinTimeInHours"], 10) * 3600 * 1000; + Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_8__["setSession"])(response.newUser.User.id, response.token, connexionMaxTime); + } else if ((this.status === 200 || this.status === 404) && response.errors != undefined) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", badLinkValidationMessage.replace("#URL", configTemplate.connectionPage), "", ["error"]); + } + }; - xhr.send(); // Génére un mot de passe pseudo-aléatoire : + xhr.send(); // Génére un mot de passe pseudo-aléatoire : - passwordLink.addEventListener("click", function (e) { - e.preventDefault(); - passwordInput.type = "text"; - passwordInput.value = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["getPassword"])(8, 12); // Copie du mot de passe généré dans le "presse-papier" de l'ordinateur : + passwordLink.addEventListener("click", function (e) { + e.preventDefault(); + passwordInput.type = "text"; + passwordInput.value = Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["getPassword"])(8, 12); // Copie du mot de passe généré dans le "presse-papier" de l'ordinateur : - passwordInput.select(); - document.execCommand("copy"); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(passwordHelp, "div", passwordCopied, "", ["success"]); - }); // Vérifie que le code/e-mail de parrainage saisi est valide : + passwordInput.select(); + document.execCommand("copy"); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(passwordHelp, "div", passwordCopied, "", ["success"]); + }); // Vérifie que le code/e-mail de parrainage saisi est valide : - codeGodfatherInput.addEventListener("blur", function (e) { - var codeValue = codeGodfatherInput.value.trim(); + codeGodfatherInput.addEventListener("blur", function (e) { + const codeValue = codeGodfatherInput.value.trim(); - if (codeValue !== "") { - var _xhr = new XMLHttpRequest(); + if (codeValue !== "") { + const xhr = new XMLHttpRequest(); + xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getGodfatherRoute); - _xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.getGodfatherRoute); - - _xhr.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - if (this.status === 204) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "div", godfatherNotFound, "", ["error"]);else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "div", godfatherFound, "", ["success"]); - } - }; - - _xhr.setRequestHeader("Content-Type", "application/json"); - - var _datas = { - codeTest: codeValue - }; - - _xhr.send(JSON.stringify(_datas)); - } - }); // Efface l'éventuel message déjà injecté si l'utilisateur revient sur ce champ de saisie : - - codeGodfatherInput.addEventListener("focus", function (e) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "i", notRequired); - }); // Traite de l'envoi d'une mise à jour des infos : - - formAccount.addEventListener("submit", function (e) { - e.preventDefault(); - divResponse.innerHTML = ""; - var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formAccount); // Recomposition des jours d'envoi de l'abonnement - - datas.receiptDays = ""; - - for (var i = 1; i <= 7; i++) { - if (datas["d" + i] !== undefined) datas.receiptDays += "" + i; - } - - var user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); // on a créé la session + haut - - var xhrUserUpdate = new XMLHttpRequest(); - xhrUserUpdate.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.signupCompletionRoute + user.id); - - xhrUserUpdate.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && response.message !== undefined) { - if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["saveLocaly"])("message", { - message: response.message, - color: "success" - }); - window.location.assign(configTemplate["userHomePage"]); - } else if (response.errors) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - } - }; - - xhrUserUpdate.setRequestHeader("Content-Type", "application/json"); - xhrUserUpdate.setRequestHeader("Authorization", "Bearer " + user.token); - - if (datas) { - xhrUserUpdate.send(JSON.stringify(datas)); - } - }); + xhr.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + if (this.status === 204) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "div", godfatherNotFound, "", ["error"]);else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "div", godfatherFound, "", ["success"]); } + }; + + xhr.setRequestHeader("Content-Type", "application/json"); + const datas = { + codeTest: codeValue + }; + xhr.send(JSON.stringify(datas)); + } + }); // Efface l'éventuel message déjà injecté si l'utilisateur revient sur ce champ de saisie : + + codeGodfatherInput.addEventListener("focus", function (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "i", notRequired); + }); // Traite de l'envoi d'une mise à jour des infos : + + formAccount.addEventListener("submit", function (e) { + e.preventDefault(); + divResponse.innerHTML = ""; + let datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formAccount); // Recomposition des jours d'envoi de l'abonnement + + datas.receiptDays = ""; + + for (let i = 1; i <= 7; i++) { + if (datas["d" + i] !== undefined) datas.receiptDays += "" + i; + } + + const user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); // on a créé la session + haut + + const xhrUserUpdate = new XMLHttpRequest(); + xhrUserUpdate.open("PUT", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + configUsers.userRoutes + configUsers.signupCompletionRoute + user.id); + + xhrUserUpdate.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + + if (this.status === 200 && response.message !== undefined) { + if (Array.isArray(response.message)) response.message = response.message.join("
    ");else response.message = response.message; + Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["saveLocaly"])("message", { + message: response.message, + color: "success" + }); + window.location.assign(configTemplate["userHomePage"]); + } else if (response.errors) { + if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = serverError; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.errors, "", ["error"]); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); } + }; - _context.next = 12; - break; + xhrUserUpdate.setRequestHeader("Content-Type", "application/json"); + xhrUserUpdate.setRequestHeader("Authorization", "Bearer " + user.token); - case 8: - _context.prev = 8; - _context.t0 = _context["catch"](0); - console.error(_context.t0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - - case 12: - case "end": - return _context.stop(); - } + if (datas) { + xhrUserUpdate.send(JSON.stringify(datas)); + } + }); } - }, _callee, null, [[0, 8]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + } + } catch (e) { + console.error(e); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + } +}; initialise(); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); @@ -1217,14 +1183,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -1242,32 +1207,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -1291,13 +1245,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -1318,25 +1272,17 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } 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 normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - // Fonction associant les attributs fournis à un champ de formulaire -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { +const setAttributesToInputs = (inputsConf, myForm) => { + for (let i in myForm.elements) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; + let idInput = myForm.elements[i].id; if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); + let inputHTML = document.getElementById(idInput); - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } + for (let attribute in inputsConf[idInput]) inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); } } } @@ -1344,49 +1290,27 @@ var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { return true; }; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); +const getDatasFromInputs = myForm => { + const datas = {}; + const formData = new FormData(myForm); - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } + for (let entrie of formData.entries()) datas[entrie[0]] = entrie[1]; return datas; }; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. // Revoir pour les select -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); +const empyForm = myForm => { + const formData = new FormData(myForm); - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); + for (let entrie of formData.entries()) { + if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; } return true; }; // Vide et cache le formulaire -var empyAndHideForm = function empyAndHideForm(myForm) { +const empyAndHideForm = myForm => { empyForm(myForm); myForm.style.display = "none"; }; @@ -1407,7 +1331,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _config_matomo_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_config_matomo_js__WEBPACK_IMPORTED_MODULE_0__); // Fonction chargeant le code matomo -var loadMatomo = function loadMatomo() { +const loadMatomo = () => { // chargement de matomo var _paq = window._paq = window._paq || []; //ajout cnil : @@ -1467,14 +1391,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); // Fonction récupérant les paramètres passés par l'url -var getUrlParams = function getUrlParams() { +const getUrlParams = () => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); + const parameters = location.search.substring(1).split("&"); if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, + let param, datas = {}; - for (var i in parameters) { + for (let i in parameters) { param = parameters[i].split("="); if (param.length === 2) datas[param[0]] = decodeURI(param[1]); } @@ -1504,27 +1428,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1533,11 +1453,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1551,96 +1471,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1649,4 +1541,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9zdWJzY3JpYmVWYWxpZGF0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9tYXRvbW8uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJjb25maWdVc2VycyIsImNvZGVHb2RmYXRoZXJJbnB1dCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZFeHBsYW5hdGlvbnMiLCJkaXZNZXNzYWdlIiwiZGl2UmVzcG9uc2UiLCJmb3JtQWNjb3VudCIsInBhc3N3b3JkSW5wdXQiLCJwYXNzd29yZExpbmsiLCJwYXNzd29yZEhlbHAiLCJpbml0aWFsaXNlIiwic3R5bGUiLCJkaXNwbGF5IiwiY2hlY2tTZXNzaW9uIiwiaXNDb25uZWN0ZWQiLCJzYXZlTG9jYWx5IiwibWVzc2FnZSIsImNvbG9yIiwidXNlciIsImdldExvY2FseSIsImhvbWVQYWdlIiwic3RhdHVzIiwid2luZG93IiwibG9jYXRpb24iLCJhc3NpZ24iLCJsb2FkTWF0b21vIiwiZGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJ0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIm5ld1VzZXIiLCJ0b2tlbiIsImFkZEVsZW1lbnQiLCJzZXRBdHRyaWJ1dGVzVG9JbnB1dHMiLCJkYXRhIiwiVXNlciIsImVsZW1lbnRzIiwiU3Vic2NyaXB0aW9uIiwicmVjZWlwdERheXMiLCJjaGVja2VkIiwiY29ubmV4aW9uTWF4VGltZSIsIm5vdyIsInBhcnNlSW50Iiwic2V0U2Vzc2lvbiIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInNlbmQiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwidHlwZSIsImdldFBhc3N3b3JkIiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJjb2RlVmFsdWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiY29kZVRlc3QiLCJzdHJpbmdpZnkiLCJpbm5lckhUTUwiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJVc2VyVXBkYXRlIiwiY29uc29sZSIsImVycm9yIiwiaGVsbG9EZXYiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsImxpbmsiLCJpbnB1dHNDb25mIiwibXlGb3JtIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWVzIiwiZW50cmllIiwiZW1weUZvcm0iLCJlbXB5QW5kSGlkZUZvcm0iLCJfcGFxIiwicHVzaCIsInNlbGYiLCJnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0Iiwibm93VHMiLCJyb3VuZCIsImdldFRpbWUiLCJ2aXNpdG9ySW5mbyIsImdldFZpc2l0b3JJbmZvIiwiY3JlYXRlVHMiLCJjb29raWVUaW1lb3V0Iiwib3JpZ2luYWxUaW1lb3V0Iiwic2V0VmlzaXRvckNvb2tpZVRpbWVvdXQiLCJ1IiwiZCIsImciLCJzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhc3luYyIsInNyYyIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsImluZGV4T2YiLCJvbmVycm9yIiwic3RhdHVzVGV4dCJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsbUNBQUQsQ0FBckI7O0FBQ0EsSUFBTUMsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLHFEQUFELENB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T0FBakIsRUFBMEJvSSxTQUExQixDQUFaO0FBQ0FFLDZCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBekgscUJBQUcsQ0FBQ29JLE9BQUosR0FBYztBQUFBLDJCQUFNVixNQUFNLENBQUMxSCxHQUFHLENBQUNxSSxVQUFMLENBQVo7QUFBQSxtQkFBZDs7QUFDQXJJLHFCQUFHLENBQUMyQixJQUFKO0FBQ0g7QUFDSjtBQUNKLGFBdEVNLENBRmlCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVozQyxZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTTRJLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNOLGNBQUQsRUFBaUJuSSxPQUFqQixFQUEwQm9JLFNBQTFCLEVBQ3JCO0FBQ0ksTUFBRyxDQUFDNU8sMkRBQU8sQ0FBQ3dHLE9BQUQsQ0FBWCxFQUNJRCxvRUFBVSxDQUFDLFNBQUQsRUFBWUMsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDeEcsMkRBQU8sQ0FBQzRPLFNBQUQsQ0FBWCxFQUNJckksb0VBQVUsQ0FBQyxLQUFELEVBQVFxSSxTQUFSLENBQVY7QUFDSixNQUFHLENBQUM1TywyREFBTyxDQUFDMk8sY0FBRCxDQUFYLEVBQ0k3SCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCMkgsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9zdWJzY3JpYmVWYWxpZGF0aW9uLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL3N1YnNjcmliZVZhbGlkYXRpb24uanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwiLy8gU2kgbm9uIHV0aWxpc8OpLCBzdXBwcmltZXIgbCdhcHBlbCBkZXMgSlMgZnJvbnQtZW5kIHB1aXMgcmVjb21waWxlci5cbi8vIFJldm9pciBjb21tZW50IHLDqW9yZ2FuaXNlciBjZWxhIHNvdXMtZm9ybWUgZGUgbW9kdWxlIGluZMOpcGVuZGFudC5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBTdGF0cyBNYXRvbW8gOlxuICAgIG1hdG9tbzogeyB1cmw6IFwiaHR0cHM6Ly9zdGF0cy5sZS1mYWItbGFiLmNvbS9cIiwgc2l0ZUlkOiBcIjVcIiB9LFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gUEFHRSBQRVJNRVRUQU5UIERFIFZBTElERVIgTEEgQ1LDiUFUSU9OIERFIFNPTiBDT01QVEUsIFBVSVMgREUgQ09NUEzDiVRFUiBTT04gSU5TQ1JJUFRJT05cblxuLy8vIFVuIHRva2VuIGVzdCB0cmFuc21pcyBlbiBwYXJhbcOodHJlIGRlIGwnVXJsLiBJbCBhIHVuZSB2YWxpZGl0w6kgbGltaXTDqSBkYW5zIGxlIHRlbXBzLlxuLy8vIFNpIGxlIHRva2VuIG4nZXN0IHBhcy9wbHVzIHZhbGlkZSwgb24gcmVkaXJpZ2UgbCd1dGlsaXNhdGV1ciB2ZXJzIGxhIHBhZ2UgZGUgY29ubmV4aW9uIHBvdXIgb2J0ZW5pciB1biBub3V2ZWF1IGxpZW4uXG4vLy8gU2kgbGUgdG9rZW4gZXN0IG9rLCBvbiBsJ2luZm9ybWUgcXVlIHRvdXQgZXN0IG9rIGV0IGx1aSBwcm9wb3NlIGRlIHNlIGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSBzb24gY29tcHRlLiBVbmUgc2Vzc2lvbiBsdWkgZXN0IMOpZ2FsZW1lbnQgY3LDqcOpZS5cbi8vLyBTaSBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIHVuZSBzZXNzaW9uIGFjdGl2ZSB2YWxpZGUsIGMnZXN0IHF1J2lsIGEgZMOpasOgIGNsaXF1w6kgc3VyIGxlIGxpZW4uIE9uIGxlIHJlZGlyaWdlIHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWwuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiB0aXLDqXMgZHUgYmFja2VuZCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSwgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmNvbnN0IGNvbmZpZ1VzZXJzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTsgLy8gYmVzb2luIGRlIHRvdXMgbGUgZmljaGllciBwb3VyIGNvbmZpZ3VyZXIgbGUgZm9ybXVsYWlyZSBkZSBzYWlzaWUsIGV0Yy5cblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgZ2V0UGFzc3dvcmQgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgbG9hZE1hdG9tbyB9IGZyb20gXCIuL3Rvb2xzL21hdG9tby5qc1wiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24sIHNldFNlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHsgbm90UmVxdWlyZWQsIHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IGFscmVhZHlDb25uZWN0ZWQsIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSwgZ29kZmF0aGVyRm91bmQsIGdvZGZhdGhlck5vdEZvdW5kLCBwYXNzd29yZENvcGllZCwgdmFsaWRhdGlvbk1lc3NhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGNvZGVHb2RmYXRoZXJJbnB1dD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvZGVHb2RmYXRoZXJcIik7XG5jb25zdCBkaXZFeHBsYW5hdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImV4cGxhbmF0aW9uc1wiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5jb25zdCBmb3JtQWNjb3VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaXB0aW9uMlwiKTtcbmNvbnN0IHBhc3N3b3JkSW5wdXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXdQYXNzd29yZFwiKTtcbmNvbnN0IHBhc3N3b3JkTGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdldFBhc3N3b3JkXCIpO1xuY29uc3QgcGFzc3dvcmRIZWxwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGFzc3dvcmRNZXNzYWdlXCIpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIC8vIEV4cGxpY2F0aW9ucyBjYWNow6llcyBwYXIgZMOpZmF1dCA6XG4gICAgICAgIGRpdkV4cGxhbmF0aW9ucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogYWxyZWFkeUNvbm5lY3RlZCwgY29sb3I6XCJpbmZvXCIgfSk7XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBob21lUGFnZT11c2VyLnN0YXR1cytcIkhvbWVQYWdlXCI7Ly8gbG9ycyBkZSBsYSBjcsOpYXRpb24gZCd1biBjb21wdGUsIHNldWwgbGUgc3RhdHV0IFwidXNlclwiIGVzdCBwb3NzaWJsZS5cbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxvYWRNYXRvbW8oKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgaWYoZGF0YXMgJiYgZGF0YXMudCE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5jaGVja1N1YnNjcmliZVRva2VuUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubmV3VXNlciAhPSB1bmRlZmluZWQgJiYgcmVzcG9uc2UudG9rZW4gIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHZhbGlkYXRpb25NZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZmZpY2hhZ2UgZXQgaW5pdGlhbGlzYXRpb24gZHUgZm9ybXVsYWlyZSBwZXJtZXR0YW50IGRlIGNvbXBsw6l0ZXIgbGVzIGluZm9zIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZFeHBsYW5hdGlvbnMuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1VzZXJzLCBmb3JtQWNjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWZmaWNoYWdlIGRlcyBpbmZvcyBkw6lqw6AgZW5yZWdpc3Ryw6llcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIHJlc3BvbnNlLm5ld1VzZXIuVXNlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1BY2NvdW50LmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUFjY291bnQuZWxlbWVudHNbZGF0YV0udmFsdWU9cmVzcG9uc2UubmV3VXNlci5Vc2VyW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb3VycyBkZSByw6ljZXB0aW9uIGRlIGwnYWJvbm5lbm1lbnQgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5uZXdVc2VyLlN1YnNjcmlwdGlvbi5yZWNlaXB0RGF5cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUFjY291bnQuZWxlbWVudHNbXCJkXCIrcmVzcG9uc2UubmV3VXNlci5TdWJzY3JpcHRpb24ucmVjZWlwdERheXNbaV1dLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2VydGFpbnMgbmF2aWdhdGV1cnMgcmVtcGxpc3NlbnQgYXV0b21hdGlxdWVtZW50IGxlcyBjaGFtcHMgcGFzc3dvcmQgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkSW5wdXQudmFsdWU9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDcsOpYXRpb24gZCd1bmUgc2Vzc2lvbiBjb3VydGUgYXZlYyBsZSB0b2tlbiByZcOndSAobsOpY2Vzc2FpcmUgcG91ciBsYSBzdWl0ZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25uZXhpb25NYXhUaW1lPURhdGUubm93KCkrcGFyc2VJbnQodG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycywxMCkqMzYwMCoxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlc3Npb24ocmVzcG9uc2UubmV3VXNlci5Vc2VyLmlkLCByZXNwb25zZS50b2tlbiwgY29ubmV4aW9uTWF4VGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gNDA0KSAmJiByZXNwb25zZS5lcnJvcnMgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBHw6luw6lyZSB1biBtb3QgZGUgcGFzc2UgcHNldWRvLWFsw6lhdG9pcmUgOlxuICAgICAgICAgICAgICAgIHBhc3N3b3JkTGluay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRJbnB1dC50eXBlPVwidGV4dFwiO1xuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZElucHV0LnZhbHVlPWdldFBhc3N3b3JkKDgsIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29waWUgZHUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBkYW5zIGxlIFwicHJlc3NlLXBhcGllclwiIGRlIGwnb3JkaW5hdGV1ciA6XG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkSW5wdXQuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChwYXNzd29yZEhlbHAsIFwiZGl2XCIsIHBhc3N3b3JkQ29waWVkLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBWw6lyaWZpZSBxdWUgbGUgY29kZS9lLW1haWwgZGUgcGFycmFpbmFnZSBzYWlzaSBlc3QgdmFsaWRlIDpcbiAgICAgICAgICAgICAgICBjb2RlR29kZmF0aGVySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVWYWx1ZT1jb2RlR29kZmF0aGVySW5wdXQudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZihjb2RlVmFsdWUhPT1cIlwiKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5nZXRHb2RmYXRoZXJSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjA0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvZGVHb2RmYXRoZXJNZXNzYWdlXCIpLCBcImRpdlwiLCBnb2RmYXRoZXJOb3RGb3VuZCwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29kZUdvZGZhdGhlck1lc3NhZ2VcIiksIFwiZGl2XCIsIGdvZGZhdGhlckZvdW5kLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTsgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFzPXsgY29kZVRlc3Q6Y29kZVZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gRWZmYWNlIGwnw6l2ZW50dWVsIG1lc3NhZ2UgZMOpasOgIGluamVjdMOpIHNpIGwndXRpbGlzYXRldXIgcmV2aWVudCBzdXIgY2UgY2hhbXAgZGUgc2Fpc2llIDpcbiAgICAgICAgICAgICAgICBjb2RlR29kZmF0aGVySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29kZUdvZGZhdGhlck1lc3NhZ2VcIiksIFwiaVwiLCBub3RSZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFpdGUgZGUgbCdlbnZvaSBkJ3VuZSBtaXNlIMOgIGpvdXIgZGVzIGluZm9zIDpcbiAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1BY2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVjb21wb3NpdGlvbiBkZXMgam91cnMgZCdlbnZvaSBkZSBsJ2Fib25uZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgZGF0YXMucmVjZWlwdERheXM9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTE7IGk8PTc7IGkrKylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXNbXCJkXCIraV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cys9XCJcIitpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTsvLyBvbiBhIGNyw6nDqSBsYSBzZXNzaW9uICsgaGF1dFxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJVc2VyVXBkYXRlID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUub3BlbihcIlBVVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5zaWdudXBDb21wbGV0aW9uUm91dGUrdXNlci5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSwgY29sb3I6XCJzdWNjZXNzXCIgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oY29uZmlnVGVtcGxhdGVbXCJ1c2VySG9tZVBhZ2VcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcbmhlbGxvRGV2KCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL21hdG9tby5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9zdWJzY3JpYmVWYWxpZGF0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9tYXRvbW8uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJkZWZhdWx0UmVjZWlwdERheXMiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJtYXhRdWVzdGlvbm5haXJlU2VuZGVkQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiZmllbGROZXdRdWVzdGlvbm5haXJlcyIsIm5iUXVlc3Rpb25uYWlyZXNCeUdyb3VwTWluIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXgiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZXMiLCJkaXJXZWJRdWVzdGlvbm5haXJlcyIsIm1hdG9tbyIsInVybCIsInNpdGVJZCIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwicmVnZW5lcmF0ZUhUTUwiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ3JvdXBSb3V0ZXMiLCJnZXRHcm91cFJvdXRlIiwicHJldmlld0dyb3VwUm91dGVzIiwic2VhcmNoR3JvdXBzUm91dGUiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldEFkbWluU3RhdHMiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJHcm91cCIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJzZWFyY2giLCJzZWFyY2hHcm91cHMiLCJkaXJDYWNoZUdyb3VwcyIsImRpckNhY2hlVGFncyIsImRpckhUTUxHcm91cHMiLCJkaXJIVE1MTmV3cyIsImRpckhUTUxUYWdzIiwiZGlyV2ViR3JvdXBzIiwiZGlyV2ViTmV3cyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJ1c2VyUm91dGVzIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImNyZWF0ZVVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImdldEdvZGZhdGhlclJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJnZXRQYXltZW50cyIsImdldFVzZXJJbmZvcyIsImdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFVzZXJSb3V0ZSIsInNpZ251cENvbXBsZXRpb25Sb3V0ZSIsInN1YnNjcmliZVJvdXRlIiwidW5zdWJzY3JpYmVSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInZhbGlkYXRlVXNlclJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMiLCJhZGRCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJhZFVybCIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5TaG93T25XZWJTaXRlIiwiZGVsZXRlQnRuVHh0IiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoQ3JvbiIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoVG9rZW4iLCJuZWVkZWRQYXJhbXMiLCJuZXh0UGFnZSIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsIm5vdFZhbGlkRm9ybWF0IiwicHJldmlvdXNQYWdlIiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNjcmlwdFRpbWluZ0luZm8iLCJzdGF0c0FkbWluIiwic3Vic2NyaXB0aW9uQ2FsbCIsInVwZGF0ZUJ0blR4dCIsInVwZGF0ZU9rTWVzc2FnZSIsImFscmVhZHlDb25uZWN0ZWQiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJiYWRQYXNzd29yZCIsImJ5ZWJ5ZU1lc3NhZ2UiLCJjb25uZWN0aW9uT2siLCJjcmVhdGlvbk9rTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJmYWlsQm90VGVzdCIsImZhaWxCb3RUZXN0TG9nIiwiZm9ybXNFbWFpbExhYmVsIiwiZm9ybXNFbWFpbFBsYWNlaG9sZGVyIiwiZm9ybXNFbWFpbDJQbGFjZWhvbGRlciIsImZvcm1zQ0dVT2tMYWJlbCIsImZvcm1zU3VibWl0VHh0IiwiZ29kZmF0aGVyRm91bmQiLCJnb2RmYXRoZXJOb3RGb3VuZCIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zVXNlck5iR29kQ2hpbGRzIiwiaW5mb3NVc2VyTm9Hb2RjaGlsZHMiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZVN1YmplY3QiLCJuZWVkQmVDb25uZWN0ZWQiLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkRW1haWwiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRMYW5ndWFnZSIsIm5lZWRMb25nUGFzc1dvcmQiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkU3RhdHVzIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwicGFzc3dvcmRDb3BpZWQiLCJzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQiLCJ0b29NYW55TG9naW5GYWlscyIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsIndlbGNvbWVNZXNzYWdlIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwiYWJvdXRQYWdlIiwiY2d1UGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsInVzZXJIb21lUGFnZVR4dCIsInZhbGlkYXRpb25MaW5rUGFnZSIsIm1haWxSZWNpcGllbnRUeHQiLCJsaWNlbmNlVHh0IiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwiaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlIiwibmV3c0xpc3RUaXRsZSIsInRhZ0xpc3RUaXRsZSIsInRhZ0xpc3RNZXRhRGVzYyIsInRhZ0xpc3RJbnRybyIsImFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dCIsInF1aXpFbGVtZW50TGlua3NJbnRybyIsInF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGUiLCJleHBsYW5hdGlvbkVsZW1lbnRUeHQiLCJ0d2l0dGVyQWNjb3VudCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwiY29uZmlnVGVtcGxhdGUiLCJjb25maWdVc2VycyIsImNvZGVHb2RmYXRoZXJJbnB1dCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZFeHBsYW5hdGlvbnMiLCJkaXZNZXNzYWdlIiwiZGl2UmVzcG9uc2UiLCJmb3JtQWNjb3VudCIsInBhc3N3b3JkSW5wdXQiLCJwYXNzd29yZExpbmsiLCJwYXNzd29yZEhlbHAiLCJpbml0aWFsaXNlIiwic3R5bGUiLCJkaXNwbGF5IiwiaXNDb25uZWN0ZWQiLCJjaGVja1Nlc3Npb24iLCJzYXZlTG9jYWx5IiwibWVzc2FnZSIsImNvbG9yIiwidXNlciIsImdldExvY2FseSIsImhvbWVQYWdlIiwic3RhdHVzIiwid2luZG93IiwibG9jYXRpb24iLCJhc3NpZ24iLCJsb2FkTWF0b21vIiwiZGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJ0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIm5ld1VzZXIiLCJ0b2tlbiIsImFkZEVsZW1lbnQiLCJzZXRBdHRyaWJ1dGVzVG9JbnB1dHMiLCJkYXRhIiwiVXNlciIsImVsZW1lbnRzIiwiU3Vic2NyaXB0aW9uIiwicmVjZWlwdERheXMiLCJjaGVja2VkIiwiY29ubmV4aW9uTWF4VGltZSIsIm5vdyIsInBhcnNlSW50Iiwic2V0U2Vzc2lvbiIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInNlbmQiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwidHlwZSIsImdldFBhc3N3b3JkIiwic2VsZWN0IiwiZXhlY0NvbW1hbmQiLCJjb2RlVmFsdWUiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiY29kZVRlc3QiLCJzdHJpbmdpZnkiLCJpbm5lckhUTUwiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJVc2VyVXBkYXRlIiwiY29uc29sZSIsImVycm9yIiwiaGVsbG9EZXYiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsImxpbmsiLCJpbnB1dHNDb25mIiwibXlGb3JtIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWUiLCJlbnRyaWVzIiwiZW1weUZvcm0iLCJlbXB5QW5kSGlkZUZvcm0iLCJfcGFxIiwicHVzaCIsInNlbGYiLCJnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0Iiwibm93VHMiLCJyb3VuZCIsImdldFRpbWUiLCJ2aXNpdG9ySW5mbyIsImdldFZpc2l0b3JJbmZvIiwiY3JlYXRlVHMiLCJjb29raWVUaW1lb3V0Iiwib3JpZ2luYWxUaW1lb3V0Iiwic2V0VmlzaXRvckNvb2tpZVRpbWVvdXQiLCJ1IiwiZCIsImciLCJzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJhc3luYyIsInNyYyIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIm5iUXVlc3Rpb25zIiwiUXVlc3Rpb25uYWlyZUlkIiwiR3JvdXBJZCIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJvbmxvYWQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsImluZGV4T2YiLCJvbmVycm9yIiwic3RhdHVzVGV4dCJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsbUNBQUQsQ0FBckI7O0FBQ0EsSUFBTUMsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLHFEQUFELENB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T0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDeEcsMkRBQU8sQ0FBQzRPLFNBQUQsQ0FBWCxFQUNJckksb0VBQVUsQ0FBQyxLQUFELEVBQVFxSSxTQUFSLENBQVY7QUFDSixNQUFHLENBQUM1TywyREFBTyxDQUFDMk8sY0FBRCxDQUFYLEVBQ0k3SCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCMkgsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9zdWJzY3JpYmVWYWxpZGF0aW9uLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL3N1YnNjcmliZVZhbGlkYXRpb24uanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwiLy8gU2kgbm9uIHV0aWxpc8OpLCBzdXBwcmltZXIgbCdhcHBlbCBkZXMgSlMgZnJvbnQtZW5kIHB1aXMgcmVjb21waWxlci5cbi8vIFJldm9pciBjb21tZW50IHLDqW9yZ2FuaXNlciBjZWxhIHNvdXMtZm9ybWUgZGUgbW9kdWxlIGluZMOpcGVuZGFudC5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBTdGF0cyBNYXRvbW8gOlxuICAgIG1hdG9tbzogeyB1cmw6IFwiaHR0cHM6Ly9zdGF0cy5sZS1mYWItbGFiLmNvbS9cIiwgc2l0ZUlkOiBcIjVcIiB9LFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsLy8gbGEgYmFzZSDDoCBsYXF1ZWxsZSBzJ2Fqb3V0ZSBsZXMgcm91dGVzIHN1aXZhbnRlc1xuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLCBcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBncm91cGVzIDpcbiAgICBncm91cFJvdXRlczogXCIvZ3JvdXBcIixcbiAgICBnZXRHcm91cFJvdXRlOiBcIi9nZXQvXCIsXG4gICAgcHJldmlld0dyb3VwUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgc2VhcmNoR3JvdXBzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsLy8gZm9uY3Rpb25uZSBhdXNzaSBwb3VyIGxlcyBncm91cGVzXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLC8vIGlkZW1cbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIEdyb3VwIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCBsYWlzc8OpIHZpZGUgZGFucyBsZSBmb3JtdWxhaXJlXG4gICAgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaEdyb3VwczogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEpTT04gZ8OpbsOpcsOpcyA6XG4gICAgZGlyQ2FjaGVHcm91cHMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL2dyb3Vwc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSFRNTCBnw6luw6lyw6lzIDpcbiAgICBkaXJIVE1MR3JvdXBzIDogXCJmcm9udC9wdWJsaWMvcXVpei9ncFwiLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlcyA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MTmV3cyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIC8vIElkZW0gbWFpcyBwb3VyIHVybHMgOlxuICAgIGRpcldlYkdyb3VwcyA6IFwicXVpei9ncFwiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmVzIDogXCJxdWl6XCIsXG4gICAgZGlyV2ViTmV3cyA6IFwicXVpenMvXCIsXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenMvXCIsXG4gICAgLy8gbGltaXRlIGRlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSwgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZCA6XG4gICAgbmJSYW5kb21SZXN1bHRzIDogMyxcbiAgICAvKiBWYWxldXJzIGVuIGZhaXQgZMOpZmluaWVzIGRhbnMgaW5zdGFuY2UuanMgZG9uYyDDoCBzdXBwcmltZXIgcXVhbmQgcGx1cyB1dGlsaXPDqWVzIGFpbGxldXJzIDogKi9cbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIiwgICBcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLCAgICBcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBnZXRVc2Vyc1F1ZXN0aW9ubmFpcmVzUm91dGU6IFwiL2dldHVzZXJzcXVlc3Rpb25uYWlyZXMvXCIsLy8gbGVzIHF1ZXN0aW9ubmFpcmVzIGF1eHF1ZWxzIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgZXUgYWNjw6hzIHZpYSBzb24gYWJvbm5lbWVudCAgICBcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBzaWdudXBDb21wbGV0aW9uUm91dGU6IFwiL3NpZ251cGNvbXBsZXRpb24vXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDEsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6IDg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzV2l0aG91dEFuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL3dpdGhvdXRcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBZmZpY2hlciAhXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuUHJvcG9zZVN1YnNjcmliZTogXCJKZSBjcsOpZSBtb24gY29tcHRlLlwiLFxuICAgIGJ0blNob3dPbldlYlNpdGU6IFwiTGlyZSBsYSBzdWl0ZSBzdXIgI1NJVEVfTkFNRVwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gZGUgbCdlbnJlZ2lzdHJlbWVudCAjSUQgYSDDqWNob3XDqS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IGxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzLiBWb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuIERlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIixcbiAgICBzdWJzY3JpcHRpb25DYWxsOiBcIkluc2NyaXZlei12b3VzICFcIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpIGF1IHNpdGUgIVwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBuZSBjb3JyZXNwb25kIGF1eCBpbmZvcm1hdGlvbnMgc2Fpc2llcy5cIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIiwgXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biBjb21wdGUgdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBmYWlsQm90VGVzdDogXCJVbiBwcm9ibMOobWUgYSDDqXTDqSByZW5jb250csOpIGR1cmFudCB2b3RyZSBpbnNjcmlwdGlvbi4gRW4gY2FzIGRlIGRpZmZpY3VsdMOpLCBuJ2jDqXNpdGV6IHBhcyBjb250YWN0ZXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIGZhaWxCb3RUZXN0TG9nOiBcIlVuZSBpbnNjcmlwdGlvbiBhIMOpdMOpIGJsb3F1w6llLCBwYXJjZSBxdWUgbGUgY2hhbXAgZW1haWwyIMOpdGFpdCByZW5zZWlnbsOpIGF2ZWMgOiBcIixcbiAgICBmb3Jtc0VtYWlsTGFiZWw6IFwiRS1tYWlsIDpcIixcbiAgICBmb3Jtc0VtYWlsUGxhY2Vob2xkZXI6IFwiVm90cmUgYWRyZXNzZSBlLW1haWxcIixcbiAgICBmb3Jtc0VtYWlsMlBsYWNlaG9sZGVyOiBcIlNpIHZvdXMgdm95ZXogY2UgY2hhbXAsIGxhaXNzZXotbGUgdmlkZVwiLC8vY2hhbXAgcXVpIG5lIGRldnJhaXQgcGFzIMOqdHJlIHZpc2libGUgcGFyIGRlcyBodW1haW5zXG4gICAgZm9ybXNDR1VPa0xhYmVsOiBcIkonYWNjZXB0ZSA8YSBocmVmPSNsaW5rIHRhcmdldD1cXFwiX2JsYW5rXFxcIiByZWw9XFxcIm5vb3BlbmVyXFxcIiB0aXRsZT1cXFwiw4AgbGlyZSA6KVxcXCI+bGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZSBkJ1V0aWxpc2F0aW9uPC9hPiBkdSBzaXRlIChyZXF1aXMpLlwiLFxuICAgIGZvcm1zU3VibWl0VHh0OiBcIkplIG0nYWJvbm5lICFcIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBcXFwicGFycmFpblxcXCIgYSBiaWVuIMOpdMOpIHRyb3V2w6kuIENldHRlIHBlcnNvbm5lIHNlcmEgYXZlcnRpZSBxdWUgdm91cyBsJ2F2ZXogZMOpc2lnbsOpZS5cIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJEw6lzb2zDqSBtYWlzIGF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSAvIGUtbWFpbCBkZSBwYXJyYWluYWdlIDooXCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWxzIDogXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc1VzZXJOYkdvZENoaWxkczogXCJWb2ljaSBsZXMgI05CIHV0aWxpc2F0ZXVyKHMpIGluc2NyaXQocykgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIiA6IFwiLFxuICAgIGluZm9zVXNlck5vR29kY2hpbGRzOiBcIlBvdXIgbCdpbnN0YW50LCBhdWN1bmUgcGVyc29ubmUgbmUgcydlc3QgaW5zY3JpdGUsIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIGEgZXhwaXLDqS5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50ICpUSU1JTkcqICFcIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cywgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPGJyPlNpIGRhbnMgbCdhdmVuaXIgY2V0dGUgcGVyc29ubmUgc291c2NyaXQgdW4gYWJvbm5lbWVudCBwcsOpbWl1bSwgdm90cmUgcHJvcHJlIGFib25uZW1lbnQgc2VyYSBwcm9sb25nw6kgZGUgMzAgam91cnMuPC9wPjxwPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzLCB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5TaSBkYW5zIGwnYXZlbmlyIGNldHRlIHBlcnNvbm5lIHNvdXNjcml0IHVuIGFib25uZW1lbnQgcHLDqW1pdW0sIHZvdHJlIHByb3ByZSBhYm9ubmVtZW50IHNlcmEgcHJvbG9uZ8OpIGRlIDMwIGpvdXJzLlxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGUtbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uPGJyPkVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBldCBjb21wbMOpdGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIGV0IGNvbXBsw6l0ZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjQgSCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGQnw6p0cmUgZW52b3nDqSDDoCB2b3RyZSBhZHJlc3NlIGUtbWFpbCAoI0VNQUlMKS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIDxiPnBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZGUgTk9NX1NJVEUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPjwvYj4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkZSBOT01fU0lURSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZSBjb250ZW51IGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbsOAIGJpZW50w7R0IHN1ciBOT01fU0lURS5cIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6kgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSB1biBzZXJ2ZXVyIFNNVFAgdmFsaWRlLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJNZXJjaSBkJ2FjY2VwdGVyIGxlcyBDR1UgcG91ciBjcsOpZXIgdm90cmUgY29tcHRlLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gY29tcHRlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHBvdXZvaXIgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIG5vdXZlYXUgbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyIGRlIHZvdHJlIG9yZGluYXRldXIgKG91IG1vYmlsZSkuIFZvdXMgcG91dmV6IGxlIFxcXCJjb2xsZXJcXFwiIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBzZWFyY2hVc2Vyc1dpdGhvdXRSZXN1bHQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIkTDqXNvbMOpIG1haXMgaWwgeSBhIGV1IHRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuIFZvdXMgcG91dmV6IHZvdXMgeSBjb25uZWN0ZXIgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSB2b3RyZSBhYm9ubmVtZW50IGNpLWRlc3NvdXMuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wi4oCmXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG5cbiAgICAvLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbiAgICAvLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbiAgICBzdGF0aWMgZ2V0UGFzc3dvcmQgKG5iQ2FyTWluLCBuYkNhck1heClcbiAgICB7XG4gICAgICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICAgICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgICAgIH1cbiAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIHJldHVybiBwYXNzd29yZDtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIGxpZW5zIGRlIGwnaW50ZXJmYWNlXG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiwgdGl0bGU6XCJBY2PDqWRlciBvdSBjcsOpZXogdm90cmUgY29tcHRlIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIsIHRpdGxlOlwiRW4gc2F2b2lyICsgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIsIHRpdGxlOlwiUGFnZSBkJ2FjY3VlaWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiTGUgYmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiLCB0aXRsZTpcIlF1aSBhIGNyw6nDqSBXaWtpTGVybmkgPyBRdWVscyBzb250IHZvcyBkcm9pdHMgP1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIsIHRpdGxlOlwiVm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlOiBcImFkbWluLmh0bWxcIixcbiAgICBjZ3VQYWdlOiBcIkNHVi1DR1UuaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsICAgIFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZVR4dCA6IFwiTWEgcGFnZSBkJ2FjY3VlaWwuXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICAvKiBUZXh0ZXMgKGfDqW7DqXJhbCkgKi9cbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxuICAgIGxpY2VuY2VUeHQ6IFwiQGNvcHlsZWZ0IExlIGNvbnRlbnUgZGUgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyA/XFxcIj5lc3QgbGlicmU8L2E+IGV0IHZvdXMgZXN0IG9mZmVydCBzYW5zIHB1YmxpY2l0w6kuIFZvdXMgcG91dmV6IDxhIGhyZWY9XFxcIi9wYXJ0aWNpcGVyLWZpbmFuY2VtZW50Lmh0bWxcXFwiIHRpdGxlPVxcXCJGaW5hbmNlbWVudCBwYXJ0aWNpcGF0aWYgYXZlYyBjb250cmUtcGFydGllc1xcXCI+cGFydGljaXBlciDDoCBzb24gZmluYW5jZW1lbnQgZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICAvKiBQYWdlIGQnYWNjdWVpbCAqL1xuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCI8Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4uPGJyPlZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMsIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXMuPGJyPkRlcyBxdWl6cyB2b3VzIHBlcm1ldHRlbnQgZW5zdWl0ZSBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciA8Yj5kZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBjdWx0dXJlIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIGphcmRpbjwvYj4uXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiPGI+UGFzIGRlIGZhaXRzIGFsdGVybmF0aWZzPC9iPiwgdG91cyBsZXMgY29udGVudXMgc29udCA8Yj5zb3VyY8OpcyBwYXIgZGVzIGFydGljbGVzIFdpa2lww6lkaWE8L2I+Ljxicj5FdCB0b3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHB1Ymxpw6kgc3VyIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgc3VyIGNlIHN1amV0XFxcIj5zb250IHBhcnRhZ8OpcyBzb3VzIGxpY2VuY2VzIGxpYnJlczwvYT4uPGJyPkxlIHRvdXQgc2FucyBwdWJsaWNpdMOpLCBuaSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMuPGJyPjxiPlN1ciBXaWtpTGVybmksIHZvdXMgY3VsdGl2ZXogdm90cmUgamFyZGluIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPC9iPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pID9cIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiAgXCJUZXN0ZXogV2lraUxlcm5pXCIsXG4gICAgaG9tZVN1YmNyaXB0aW9uRm9ybVRpdGxlOiAgXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgLyogUGFnZSBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4uLiAqLyAgIFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiV2lraUxlcm5pIDogdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCI8cD48Yj5BdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBxdWVscXVlIGNob3NlIGRlIG5vdXZlYXU8L2I+PGJyPlNpIGRlc3NvdXMgbGVzIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLiBWb3VzIHBvdXZleiBhdXNzaSA8YSBocmVmPScvcXVpenMvdGhlbWVzLmh0bWwnPnBhcmNvdXJpciBsZSBzaXRlIHBhciB0aMOobWVzIG91IG1vdHMtY2zDqXM8L2E+LjwvcD5cIixcbiAgICAvKiBQbGFuIGR1IHNpdGUsIGxpc3RlIGRlcyB0YWdzICovICAgXG4gICAgdGFnTGlzdFRpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGRlcyBhcnRpY2xlcyBldCBxdWl6cyBzdXIgZGUgbm9tYnJldXggdGjDqG1lcyAhXCIsXG4gICAgdGFnTGlzdE1ldGFEZXNjOiBcIldpa2lMZXJuaSA6IGTDqWNvdXZyaXIgbGVzIGRpZmbDqXJlbnRzIHRow6htZXMgYWJvcmTDqXMgcGFyIFdpa2lMZXJuaS4gSW54ZXggZHUgc2l0ZS5cIixcbiAgICB0YWdMaXN0SW50cm86IFwiPGgzPkF2ZWMgV2lraUxlcm5pLCBkZXZlbmV6IGZvcnQgZW4gdGjDqG1lcy4uLiBPdWkgbWFpcyBxdWVscyB0aMOobWVzID8gOik8L2gzPjxibG9ja3F1b3RlPkFyaXN0b3Rl4oCvOiDCq+KAr0zigJlob21tZSBhIG5hdHVyZWxsZW1lbnQgbGEgcGFzc2lvbiBkZSBjb25uYcOudHJl4oCm4oCvwrs8L2Jsb2NrcXVvdGU+XCIsXG4gICAgLyogUGFnZSBxdWl6cyAqL1xuICAgIGFuc3dlcnNFeHBsYW5hdGlvbnNMaW5rVGV4dDogXCJSZWxpcmVcIixcbiAgICBxdWl6RWxlbWVudExpbmtzSW50cm86IFwiRW4gc2F2b2lyIHBsdXNcIixcbiAgICBxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlOiBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmnigK8/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiPHA+TGUgcHJpbmNpcGUgZXN0IHNpbXBsZeKArzogPGI+dm91cyBjb21tZW5jZXogcGFyIGxpcmUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6k8L2I+LiBQdWlzIHZvdXMgPGI+YWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlPC9iPi4gU3VpdmFudCBsZXMgcXVlc3Rpb25zLCA8Yj51bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlczwvYj4gZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiBD4oCZZXN0IHRvdWpvdXJzIDxiPmxlIGNvbnRlbnUgZGUgbOKAmWFydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2k8L2I+IGNvbmNlcm5hbnQgbGVzIMKr4oCvYm9ubmVz4oCvwrsgcsOpcG9uc2VzLiBD4oCZZXN0IHVuZSBmYcOnb24gZGUgdGVzdGVyIMOgIGxhIGZvaXMgdm90cmUgY2FwYWNpdMOpIGTigJlhdHRlbnRpb24gZXQgdm90cmUgbcOpbW9pcmUuIExlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbuKAmWjDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48L3A+PHA+PGI+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBk4oCZYXV0cmVzIHNvbHV0aW9ucyBwb3VyIGFtw6lsaW9yZXIgdm90cmUgY3VsdHVyZSBnw6luw6lyYWxlPC9iPi4gUG91ciBlbiBzYXZvaXIgcGx1cywgY2xpcXVleiBzdXIgbGUgYm91dG9uIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIGV4cGxhbmF0aW9uRWxlbWVudFR4dDogXCI8cD5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGRlIDxiPnJlY2V2b2lyIHBhciBlLW1haWwgw6AgbGEgZnLDqXF1ZW5jZSBjaG9pc2llLCBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlczwvYj4gZXQgcG9ydGFudCBzdXIgZGVzIHN1amV0cyB0csOocyB2YXJpw6lzIGRlIDxiPmN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4gKGFydHMsIGhpc3RvaXJlLCBsaXR0w6lyYXR1cmUsIHNjaWVuY2VzLCBldGMuKS48L3A+PHA+Q2VzIGFydGljbGVzIHNvbnQgYmFzw6lzIHN1ciA8Yj51bmUgb3UgcGx1c2lldXJzIHBhZ2VzIGRlIFdpa2lww6lkaWE8L2I+IChmb3VybmllcyBlbiBsaWVuKSwgZG9udCA8Yj5pbHMgZXh0cmFpZW50IGNlcnRhaW5lcyBpbmZvcm1hdGlvbnM8L2I+LjwvcD48cD5DaGFxdWUgc8OpcmllIGTigJlhcnRpY2xlcyBlc3QgPGI+c3VpdmllIGTigJl1biBxdWl6PC9iPiBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48L3A+PHA+PGI+Vm91cyBhcHByZW5leiBhaW5zaSByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3NlczwvYj4gdHLDqHMgc2ltcGxlbWVudC48L3A+XCIsXG4gICAgLyogQXV0cmVzICovXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHR3aXR0ZXJBY2NvdW50OiBcIldpa2lMZXJuaVwiLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMixcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbn07IiwiLy8gLS0gUEFHRSBQRVJNRVRUQU5UIERFIFZBTElERVIgTEEgQ1LDiUFUSU9OIERFIFNPTiBDT01QVEUsIFBVSVMgREUgQ09NUEzDiVRFUiBTT04gSU5TQ1JJUFRJT05cblxuLy8vIFVuIHRva2VuIGVzdCB0cmFuc21pcyBlbiBwYXJhbcOodHJlIGRlIGwnVXJsLiBJbCBhIHVuZSB2YWxpZGl0w6kgbGltaXTDqSBkYW5zIGxlIHRlbXBzLlxuLy8vIFNpIGxlIHRva2VuIG4nZXN0IHBhcy9wbHVzIHZhbGlkZSwgb24gcmVkaXJpZ2UgbCd1dGlsaXNhdGV1ciB2ZXJzIGxhIHBhZ2UgZGUgY29ubmV4aW9uIHBvdXIgb2J0ZW5pciB1biBub3V2ZWF1IGxpZW4uXG4vLy8gU2kgbGUgdG9rZW4gZXN0IG9rLCBvbiBsJ2luZm9ybWUgcXVlIHRvdXQgZXN0IG9rIGV0IGx1aSBwcm9wb3NlIGRlIHNlIGNvbXBsw6l0ZXIgbGVzIGluZm9ybWF0aW9ucyBkZSBzb24gY29tcHRlLiBVbmUgc2Vzc2lvbiBsdWkgZXN0IMOpZ2FsZW1lbnQgY3LDqcOpZS5cbi8vLyBTaSBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIHVuZSBzZXNzaW9uIGFjdGl2ZSB2YWxpZGUsIGMnZXN0IHF1J2lsIGEgZMOpasOgIGNsaXF1w6kgc3VyIGxlIGxpZW4uIE9uIGxlIHJlZGlyaWdlIHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWwuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiB0aXLDqXMgZHUgYmFja2VuZCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSwgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmNvbnN0IGNvbmZpZ1VzZXJzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTsgLy8gYmVzb2luIGRlIHRvdXMgbGUgZmljaGllciBwb3VyIGNvbmZpZ3VyZXIgbGUgZm9ybXVsYWlyZSBkZSBzYWlzaWUsIGV0Yy5cblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgZ2V0UGFzc3dvcmQgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgbG9hZE1hdG9tbyB9IGZyb20gXCIuL3Rvb2xzL21hdG9tby5qc1wiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24sIHNldFNlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHsgbm90UmVxdWlyZWQsIHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IGFscmVhZHlDb25uZWN0ZWQsIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSwgZ29kZmF0aGVyRm91bmQsIGdvZGZhdGhlck5vdEZvdW5kLCBwYXNzd29yZENvcGllZCwgdmFsaWRhdGlvbk1lc3NhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGNvZGVHb2RmYXRoZXJJbnB1dD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvZGVHb2RmYXRoZXJcIik7XG5jb25zdCBkaXZFeHBsYW5hdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImV4cGxhbmF0aW9uc1wiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5jb25zdCBmb3JtQWNjb3VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaXB0aW9uMlwiKTtcbmNvbnN0IHBhc3N3b3JkSW5wdXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXdQYXNzd29yZFwiKTtcbmNvbnN0IHBhc3N3b3JkTGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdldFBhc3N3b3JkXCIpO1xuY29uc3QgcGFzc3dvcmRIZWxwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGFzc3dvcmRNZXNzYWdlXCIpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIC8vIEV4cGxpY2F0aW9ucyBjYWNow6llcyBwYXIgZMOpZmF1dCA6XG4gICAgICAgIGRpdkV4cGxhbmF0aW9ucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogYWxyZWFkeUNvbm5lY3RlZCwgY29sb3I6XCJpbmZvXCIgfSk7XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBob21lUGFnZT11c2VyLnN0YXR1cytcIkhvbWVQYWdlXCI7Ly8gbG9ycyBkZSBsYSBjcsOpYXRpb24gZCd1biBjb21wdGUsIHNldWwgbGUgc3RhdHV0IFwidXNlclwiIGVzdCBwb3NzaWJsZS5cbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxvYWRNYXRvbW8oKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgaWYoZGF0YXMgJiYgZGF0YXMudCE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5jaGVja1N1YnNjcmliZVRva2VuUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubmV3VXNlciAhPSB1bmRlZmluZWQgJiYgcmVzcG9uc2UudG9rZW4gIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHZhbGlkYXRpb25NZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZmZpY2hhZ2UgZXQgaW5pdGlhbGlzYXRpb24gZHUgZm9ybXVsYWlyZSBwZXJtZXR0YW50IGRlIGNvbXBsw6l0ZXIgbGVzIGluZm9zIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZFeHBsYW5hdGlvbnMuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZ1VzZXJzLCBmb3JtQWNjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWZmaWNoYWdlIGRlcyBpbmZvcyBkw6lqw6AgZW5yZWdpc3Ryw6llcyA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIHJlc3BvbnNlLm5ld1VzZXIuVXNlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1BY2NvdW50LmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUFjY291bnQuZWxlbWVudHNbZGF0YV0udmFsdWU9cmVzcG9uc2UubmV3VXNlci5Vc2VyW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBKb3VycyBkZSByw6ljZXB0aW9uIGRlIGwnYWJvbm5lbm1lbnQgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5uZXdVc2VyLlN1YnNjcmlwdGlvbi5yZWNlaXB0RGF5cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUFjY291bnQuZWxlbWVudHNbXCJkXCIrcmVzcG9uc2UubmV3VXNlci5TdWJzY3JpcHRpb24ucmVjZWlwdERheXNbaV1dLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2VydGFpbnMgbmF2aWdhdGV1cnMgcmVtcGxpc3NlbnQgYXV0b21hdGlxdWVtZW50IGxlcyBjaGFtcHMgcGFzc3dvcmQgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkSW5wdXQudmFsdWU9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDcsOpYXRpb24gZCd1bmUgc2Vzc2lvbiBjb3VydGUgYXZlYyBsZSB0b2tlbiByZcOndSAobsOpY2Vzc2FpcmUgcG91ciBsYSBzdWl0ZSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25uZXhpb25NYXhUaW1lPURhdGUubm93KCkrcGFyc2VJbnQodG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycywxMCkqMzYwMCoxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlc3Npb24ocmVzcG9uc2UubmV3VXNlci5Vc2VyLmlkLCByZXNwb25zZS50b2tlbiwgY29ubmV4aW9uTWF4VGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gNDA0KSAmJiByZXNwb25zZS5lcnJvcnMgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBHw6luw6lyZSB1biBtb3QgZGUgcGFzc2UgcHNldWRvLWFsw6lhdG9pcmUgOlxuICAgICAgICAgICAgICAgIHBhc3N3b3JkTGluay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmRJbnB1dC50eXBlPVwidGV4dFwiO1xuICAgICAgICAgICAgICAgICAgICBwYXNzd29yZElucHV0LnZhbHVlPWdldFBhc3N3b3JkKDgsIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ29waWUgZHUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBkYW5zIGxlIFwicHJlc3NlLXBhcGllclwiIGRlIGwnb3JkaW5hdGV1ciA6XG4gICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkSW5wdXQuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChwYXNzd29yZEhlbHAsIFwiZGl2XCIsIHBhc3N3b3JkQ29waWVkLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBWw6lyaWZpZSBxdWUgbGUgY29kZS9lLW1haWwgZGUgcGFycmFpbmFnZSBzYWlzaSBlc3QgdmFsaWRlIDpcbiAgICAgICAgICAgICAgICBjb2RlR29kZmF0aGVySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvZGVWYWx1ZT1jb2RlR29kZmF0aGVySW5wdXQudmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBpZihjb2RlVmFsdWUhPT1cIlwiKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5nZXRHb2RmYXRoZXJSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjA0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvZGVHb2RmYXRoZXJNZXNzYWdlXCIpLCBcImRpdlwiLCBnb2RmYXRoZXJOb3RGb3VuZCwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29kZUdvZGZhdGhlck1lc3NhZ2VcIiksIFwiZGl2XCIsIGdvZGZhdGhlckZvdW5kLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTsgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFzPXsgY29kZVRlc3Q6Y29kZVZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gRWZmYWNlIGwnw6l2ZW50dWVsIG1lc3NhZ2UgZMOpasOgIGluamVjdMOpIHNpIGwndXRpbGlzYXRldXIgcmV2aWVudCBzdXIgY2UgY2hhbXAgZGUgc2Fpc2llIDpcbiAgICAgICAgICAgICAgICBjb2RlR29kZmF0aGVySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29kZUdvZGZhdGhlck1lc3NhZ2VcIiksIFwiaVwiLCBub3RSZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFpdGUgZGUgbCdlbnZvaSBkJ3VuZSBtaXNlIMOgIGpvdXIgZGVzIGluZm9zIDpcbiAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1BY2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVjb21wb3NpdGlvbiBkZXMgam91cnMgZCdlbnZvaSBkZSBsJ2Fib25uZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgZGF0YXMucmVjZWlwdERheXM9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTE7IGk8PTc7IGkrKylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXNbXCJkXCIraV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cys9XCJcIitpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTsvLyBvbiBhIGNyw6nDqSBsYSBzZXNzaW9uICsgaGF1dFxuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJVc2VyVXBkYXRlID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUub3BlbihcIlBVVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5zaWdudXBDb21wbGV0aW9uUm91dGUrdXNlci5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSwgY29sb3I6XCJzdWNjZXNzXCIgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oY29uZmlnVGVtcGxhdGVbXCJ1c2VySG9tZVBhZ2VcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcbmhlbGxvRGV2KCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuXFxuTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHZvdXMgcG91dmV6IGxlIHRyb3V2ZXIgw6AgY2V0dGUgYWRyZXNzZSA6XFxuaHR0cHM6Ly9mb3JnZS5jaGFwcmlsLm9yZy9GYWJfQmxhYi9XaWtpTGVybmlcXG5cXG5Qb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgbWF0b21vIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9tYXRvbW8uanNcIjtcblxuLy8gRm9uY3Rpb24gY2hhcmdlYW50IGxlIGNvZGUgbWF0b21vXG5leHBvcnQgY29uc3QgbG9hZE1hdG9tbyA9ICgpID0+XG57XG4gICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICB2YXIgX3BhcSA9IHdpbmRvdy5fcGFxID0gd2luZG93Ll9wYXEgfHwgW107XG4gICAgLy9ham91dCBjbmlsICA6XG4gICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbm93ID0gbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICB2aXNpdG9ySW5mbyA9IHNlbGYuZ2V0VmlzaXRvckluZm8oKTtcbiAgICAgICAgICAgIHZhciBjcmVhdGVUcyA9IHBhcnNlSW50KHZpc2l0b3JJbmZvWzJdKTtcbiAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgIHZhciBvcmlnaW5hbFRpbWVvdXQgPSBjcmVhdGVUcyArIGNvb2tpZVRpbWVvdXQgLSBub3dUcztcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRWaXNpdG9yQ29va2llVGltZW91dCggZ2V0T3JpZ2luYWxWaXNpdG9yQ29va2llVGltZW91dCgpICk7XG4gICAgfV0pO1xuICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgIF9wYXEucHVzaChbJ3RyYWNrUGFnZVZpZXcnXSk7XG4gICAgX3BhcS5wdXNoKFsnZW5hYmxlTGlua1RyYWNraW5nJ10pO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHU9bWF0b21vLnVybDtcbiAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgIF9wYXEucHVzaChbJ3NldFNpdGVJZCcsIG1hdG9tby5zaXRlSWRdKTtcbiAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgZy50eXBlPSd0ZXh0L2phdmFzY3JpcHQnOyBnLmFzeW5jPXRydWU7IGcuc3JjPXUrJ21hdG9tby5qcyc7IHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZyxzKTtcbiAgICB9KSgpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/unsubscribe.app.js b/front/public/JS/unsubscribe.app.js index bb0ef8c..6d6b47c 100644 --- a/front/public/JS/unsubscribe.app.js +++ b/front/public/JS/unsubscribe.app.js @@ -891,14 +891,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); // FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) // Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { +const saveLocaly = (name, data) => { localStorage.setItem(name, JSON.stringify(data)); }; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; +const getLocaly = (name, json = false) => { if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); }; -var removeLocaly = function removeLocaly(name) { +const removeLocaly = name => { localStorage.removeItem(name); }; @@ -916,32 +915,21 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - // Fonction associant les attributs fournis à un champ de formulaire -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; +const addElement = (eltParent, eltType, eltContent = "", eltId = "", eltClass = [], eltAttributes = {}, replace = true) => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); + const newElement = document.createElement(eltType); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? newElement.id = eltId; if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } + for (let i in eltClass) newElement.classList.add(eltClass[i]); } - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok + if (typeof eltAttributes === "object") // !! tous les objets ne sont pas ok { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } + for (let attributName in eltAttributes) newElement.setAttribute(attributName, eltAttributes[attributName]); } if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. @@ -965,13 +953,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { +const helloDev = () => { console.log("**** Hello ami développeur :-)\n\nLe code de WikiLerni est libre et vous pouvez le trouver à cette adresse :\nhttps://forge.chapril.org/Fab_Blab/WikiLerni\n\nPour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; -var updateAccountLink = function updateAccountLink(status, configTemplate) { - var link = document.getElementById("accountHeadLink"); - var homePage = status + "HomePage"; +const updateAccountLink = (status, configTemplate) => { + const link = document.getElementById("accountHeadLink"); + const homePage = status + "HomePage"; link.href = "/" + configTemplate[homePage]; }; @@ -991,14 +979,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); // Fonction récupérant les paramètres passés par l'url -var getUrlParams = function getUrlParams() { +const getUrlParams = () => { if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); + const parameters = location.search.substring(1).split("&"); if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, + let param, datas = {}; - for (var i in parameters) { + for (let i in parameters) { param = parameters[i].split("="); if (param.length === 2) datas[param[0]] = decodeURI(param[1]); } @@ -1028,27 +1016,23 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; - -var configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); +const configTemplate = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var getTimeDifference = function getTimeDifference() { +const getTimeDifference = () => { // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse - var timeLocal = new Date().getTimezoneOffset() * -1; + const timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite // Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { +const setSession = (userId, token, durationTS) => { + const storageUser = { id: userId, token: token, duration: durationTS @@ -1057,11 +1041,11 @@ var setSession = function setSession(userId, token, durationTS) { }; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz ou d'un groupe de quizs // Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); +const checkAnswerDatas = datas => { + const lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("lastAnswer"); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); + const answer = JSON.parse(lastAnswer); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.nbQuestions) && (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.QuestionnaireId) || !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(answer.GroupId))) { datas.duration = answer.duration; @@ -1075,96 +1059,68 @@ var checkAnswerDatas = function checkAnswerDatas(datas) { }; // Cette fonction teste la connexion de l'utilisateur d'une page // On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté -var checkSession = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var status, - urlRedirection, - message, - urlWanted, - _args = arguments; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - status = _args.length > 0 && _args[0] !== undefined ? _args[0] : []; - urlRedirection = _args.length > 1 ? _args[1] : undefined; - message = _args.length > 2 ? _args[2] : undefined; - urlWanted = _args.length > 3 ? _args[3] : undefined; - return _context.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); +const checkSession = async (status = [], urlRedirection, message, urlWanted) => { + return new Promise((resolve, reject) => { + const userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("user"); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(userDatas)) { + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const user = JSON.parse(userDatas); + + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } else { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); + + xhr.onload = () => { + let response = JSON.parse(xhr.responseText); + + if (xhr.status === 200 && response.isValid && response.id != undefined) { + if (response.id === user.id) { + user.name = response.name; + user.language = response.language; + user.timeDifference = response.timeDifference; + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API + + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) + + if (response.status === "user" && response.nbDaysOk <= 0) { + const urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + + resolve(true); } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + if (status.length !== 0 && status.indexOf(response.status) === -1) { redirectUser(urlRedirection, message, urlWanted); resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["checkLoginRoute"] + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } + } else resolve(true); } - })); + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + } else { + Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("user"); + redirectUser(urlRedirection, message, urlWanted); + resolve(false); + } + }; - case 5: - case "end": - return _context.stop(); - } + xhr.onerror = () => reject(xhr.statusText); + + xhr.send(); } - }, _callee); - })); + } + }); +}; // Cette fonction sert à la précédente en cas de connexion non valide - return function checkSession() { - return _ref.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { +const redirectUser = (urlRedirection, message, urlWanted) => { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("message", message); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("url", urlWanted); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); @@ -1188,24 +1144,22 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/everywhere.js */ "./src/tools/everywhere.js"); /* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - // -- GESTION DE LA PAGE PERMETTANT DE SE DÉBONNER DE TOUS LES ENVOIS /// Un token est transmis en paramètre de l'Url. Il a une validité limité dans le temps. Si le token est ok, il n'est pas nécessaire d'être connecté. /// Dans le cas où il n'est plus valide, on peut proposer à l'utilisateur de se connecter à son compte pour se désabonner. /// Si le token est ok, on valide enregistrement le désabonnement et affiche un message de confirmation // Fichier de configuration côté client : -var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; +const lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; -var _require = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"), - accountPage = _require.accountPage; +const { + accountPage +} = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js$")("./" + _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["theme"] + "/config/" + lang + ".js"); -var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.js"), - userRoutes = _require2.userRoutes, - unsubscribeRoute = _require2.unsubscribeRoute; // Importation des fonctions utile au script : +const { + userRoutes, + unsubscribeRoute +} = __webpack_require__(/*! ../../config/users */ "../config/users.js"); // Importation des fonctions utile au script : @@ -1214,58 +1168,42 @@ var _require2 = __webpack_require__(/*! ../../config/users */ "../config/users.j // Dictionnaires : -var _require3 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"), - serverError = _require3.serverError; +const { + serverError +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); -var _require4 = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/subscription$")("./" + lang + "/subscription"), - unsubscriptionFail = _require4.unsubscriptionFail; +const { + unsubscriptionFail +} = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/subscription$")("./" + lang + "/subscription"); -var divResponse = document.getElementById("response"); +const divResponse = document.getElementById("response"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var datas, xhr; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - try { - datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_4__["getUrlParams"])(); +const initialise = async () => { + try { + const datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_4__["getUrlParams"])(); - if (datas && datas.t !== undefined) { - xhr = new XMLHttpRequest(); - xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + unsubscribeRoute + datas.t); + if (datas && datas.t !== undefined) { + const xhr = new XMLHttpRequest(); + xhr.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + userRoutes + unsubscribeRoute + datas.t); - xhr.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - if (this.status === 200 && response.message != undefined) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message.replace("#URL", accountPage), "", ["success"]);else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", unsubscriptionFail.replace("#URL", accountPage), "", ["error"]); - } - }; - - xhr.send(); - } - } catch (e) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); - } - - case 1: - case "end": - return _context.stop(); + xhr.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + let response = JSON.parse(this.responseText); + if (this.status === 200 && response.message != undefined) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", response.message.replace("#URL", accountPage), "", ["success"]);else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", unsubscriptionFail.replace("#URL", accountPage), "", ["error"]); } - } - }, _callee); - })); + }; - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); + xhr.send(); + } + } catch (e) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", serverError, "", ["error"]); + } +}; initialise(); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9zdWJzY3JpcHRpb24uanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvY2xpZW50c3RvcmFnZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZG9tLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9ldmVyeXdoZXJlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91cmwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy91bnN1YnNjcmliZS5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIiwiaW5mb3NFeHBpcmF0ZWQiLCJpbmZvc0V4cGlyYXRlZEFkbWluIiwiaW5mb3NOYkRheXMiLCJpbmZvc05iRGF5c0FkbWluIiwiaW5mb3NQYXltZW50c0FkbWluIiwiaXNOb3RWYWxpZGVkIiwibWFpbEVuZEZyZWVUaW1lQm9keUhUTUwiLCJtYWlsRW5kRnJlZVRpbWVCb2R5VHh0IiwibWFpbEVuZEZyZWVUaW1lTGlua1R4dCIsIm1haWxFbmRGcmVlVGltZU1lc3NhZ2UiLCJtYWlsRW5kRnJlZVRpbWVTdWJqZWN0IiwibWFpbEV4cGlyYXRpb25Cb2R5SFRNTCIsIm1haWxFeHBpcmF0aW9uQm9keVR4dCIsIm1haWxFeHBpcmF0aW9uTGlua1R4dCIsIm1haWxFeHBpcmF0aW9uTWVzc2FnZSIsIm1haWxFeHBpcmF0aW9uUmVsYXVuY2hUeHQiLCJtYWlsRXhwaXJhdGlvblN1YmplY3QiLCJtYWlsTmV3RWxlbWVudEZvckdyb3VwVHh0IiwibWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5VHh0IiwibWFpbFN0b3BNYWlsTGlua1R4dCIsIm5lZWRLbm93SWZOb3RpY2VPayIsIm5lZWRJbnRlZ2VyTnVtYmVyT2ZEYXlzIiwibmVlZE1pbk51bWJlck9mRGF5cyIsIm5lZWROb3RUb29Mb25nRGF5c0xpc3QiLCJuZWVkTnVtYmVyT2ZEYXlzIiwibmVlZFVuaXF1ZURheXNMaXN0IiwibmVlZFZhbGlkRGF5c0xpc3QiLCJub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIiwidW5zdWJzY3JpcHRpb25PayIsInVuc3Vic2NyaXB0aW9uRmFpbCIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsImkiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJ0YWdzTGlzdFR4dCIsImFib3V0UGFnZSIsImNndVBhZ2UiLCJkZWxldGVMaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJ1c2VySG9tZVBhZ2VUeHQiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJtYWlsUmVjaXBpZW50VHh0IiwibGljZW5jZVR4dCIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsImhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZSIsIm5ld3NMaXN0VGl0bGUiLCJ0YWdMaXN0VGl0bGUiLCJ0YWdMaXN0TWV0YURlc2MiLCJ0YWdMaXN0SW50cm8iLCJhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQiLCJxdWl6RWxlbWVudExpbmtzSW50cm8iLCJxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlIiwiZXhwbGFuYXRpb25FbGVtZW50VHh0IiwidHdpdHRlckFjY291bnQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRMb2NhbHkiLCJqc29uIiwicGFyc2UiLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImFkZEVsZW1lbnQiLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImlubmVySFRNTCIsImFwcGVuZENoaWxkIiwiaGVsbG9EZXYiLCJjb25zb2xlIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJnZXRFbGVtZW50QnlJZCIsImhvbWVQYWdlIiwiZ2V0VXJsUGFyYW1zIiwibG9jYXRpb24iLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRhdGFzIiwiZGVjb2RlVVJJIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJ0b2tlbiIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwibmJRdWVzdGlvbnMiLCJRdWVzdGlvbm5haXJlSWQiLCJHcm91cElkIiwiY2hlY2tTZXNzaW9uIiwidXJsUmVkaXJlY3Rpb24iLCJtZXNzYWdlIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ1c2VyIiwibm93IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25sb2FkIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsIndpbmRvdyIsImluZGV4T2YiLCJhc3NpZ24iLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsInNlbmQiLCJkaXZSZXNwb25zZSIsImluaXRpYWxpc2UiLCJ0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJlIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7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R0FBQ3pFLElBQUksQ0FBQ0ksS0FBTCxDQUFXLEtBQUtzRSxZQUFoQixDQUFiO0FBQ0Esd0JBQUksS0FBSzVDLE1BQUwsS0FBZ0IsR0FBaEIsSUFBdUIyQyxRQUFRLENBQUNiLE9BQVQsSUFBb0J6SixTQUEvQyxFQUNJcUcsZ0VBQVUsQ0FBQzhFLFdBQUQsRUFBYyxHQUFkLEVBQW1CYixRQUFRLENBQUNiLE9BQVQsQ0FBaUI1SSxPQUFqQixDQUF5QixNQUF6QixFQUFpQ21DLFdBQWpDLENBQW5CLEVBQWtFLEVBQWxFLEVBQXNFLENBQUMsU0FBRCxDQUF0RSxDQUFWLENBREosS0FHSXFELGdFQUFVLENBQUM4RSxXQUFELEVBQWMsR0FBZCxFQUFtQnRMLGtCQUFrQixDQUFDZ0IsT0FBbkIsQ0FBMkIsTUFBM0IsRUFBbUNtQyxXQUFuQyxDQUFuQixFQUFvRSxFQUFwRSxFQUF3RSxDQUFDLE9BQUQsQ0FBeEUsQ0FBVjtBQUNQO0FBQ0osaUJBVkQ7O0FBV0FrSCxtQkFBRyxDQUFDZ0IsSUFBSjtBQUNIO0FBQ0osYUFwQkQsQ0FxQkEsT0FBTU8sQ0FBTixFQUNBO0FBQ0lwRiw4RUFBVSxDQUFDOEUsV0FBRCxFQUFjLEdBQWQsRUFBbUI5TixXQUFuQixFQUFnQyxFQUFoQyxFQUFvQyxDQUFDLE9BQUQsQ0FBcEMsQ0FBVjtBQUNIOztBQTFCYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFWK04sVUFBVTtBQUFBO0FBQUE7QUFBQSxHQUFoQjs7QUE0QkFBLFVBQVUsRyIsImZpbGUiOiIuL0pTL3Vuc3Vic2NyaWJlLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL3Vuc3Vic2NyaWJlLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGRlZmF1bHRSZWNlaXB0RGF5czogXCIxNDdcIiwgLy8gUGFyIGTDqWZhdXQsIHF1ZWwocykgam91cihzKSBkZSBsYSBzZW1haW5lLCBsJ3V0aWxpc2F0ZXVyIHJlw6dvaXQtaWwgcXVlbHF1ZSBjaG9zZSA/ICgxPWRpbWFuY2hlLCAyPWx1bmRpLi4uIDc9c2FtZWRpKVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMCwvLyBpZiAwID0gdW5saW1pdGVkXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDEwLFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiAzLFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTIsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjcsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyMSwgLy8gaWRlbVxuICAgIG1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIHN1YnNjcmlwdGlvbidzIGUtbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIGZpZWxkTmV3UXVlc3Rpb25uYWlyZXMgOiBcInB1Ymxpc2hpbmdBdFwiLCAvLyBmaWVsZCB0byBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgbGlzdCBvZiB0aGUgbGFzdCBxdWVzdGlvbm5haXJlcywgY2FuIGJlIFwiY3JlYXRlZEF0XCIsIFwidXBkYXRlZEF0XCIgb3IgXCJwdWJsaXNoaW5nQXRcIlxuICAgIC8vIEdyb3VwcyA6XG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW46IDEsXG4gICAgbmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNYXg6IDAsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDEsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNTAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAwLFxuICAgIC8vIFF1ZXN0aW9ucyAmIHJlc3BvbnNlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVzXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIiwvLyBsYSBiYXNlIMOgIGxhcXVlbGxlIHMnYWpvdXRlIGxlcyByb3V0ZXMgc3VpdmFudGVzXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsIFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIGdyb3VwZXMgOlxuICAgIGdyb3VwUm91dGVzOiBcIi9ncm91cFwiLFxuICAgIGdldEdyb3VwUm91dGU6IFwiL2dldC9cIixcbiAgICBwcmV2aWV3R3JvdXBSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBzZWFyY2hHcm91cHNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIiwvLyBmb25jdGlvbm5lIGF1c3NpIHBvdXIgbGVzIGdyb3VwZXNcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsLy8gaWRlbVxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgR3JvdXAgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIGxhaXNzw6kgdmlkZSBkYW5zIGxlIGZvcm11bGFpcmVcbiAgICB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoR3JvdXBzOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBFbXBsYWNlbWVudCBkZXMgZmljaGllcnMgSlNPTiBnw6luw6lyw6lzIDpcbiAgICBkaXJDYWNoZUdyb3VwcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvZ3JvdXBzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBIVE1MIGfDqW7DqXLDqXMgOlxuICAgIGRpckhUTUxHcm91cHMgOiBcImZyb250L3B1YmxpYy9xdWl6L2dwXCIsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmVzIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxOZXdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgLy8gSWRlbSBtYWlzIHBvdXIgdXJscyA6XG4gICAgZGlyV2ViR3JvdXBzIDogXCJxdWl6L2dwXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZXMgOiBcInF1aXpcIixcbiAgICBkaXJXZWJOZXdzIDogXCJxdWl6cy9cIixcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6cy9cIixcbiAgICAvLyBsaW1pdGUgZGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlLCBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkIDpcbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLFxuICAgIC8qIFZhbGV1cnMgZW4gZmFpdCBkw6lmaW5pZXMgZGFucyBpbnN0YW5jZS5qcyBkb25jIMOgIHN1cHByaW1lciBxdWFuZCBwbHVzIHV0aWxpc8OpZXMgYWlsbGV1cnMgOiAqL1xuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLCAgIFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsICAgIFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGdldFVzZXJzUXVlc3Rpb25uYWlyZXNSb3V0ZTogXCIvZ2V0dXNlcnNxdWVzdGlvbm5haXJlcy9cIiwvLyBsZXMgcXVlc3Rpb25uYWlyZXMgYXV4cXVlbHMgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCBldSBhY2PDqHMgdmlhIHNvbiBhYm9ubmVtZW50ICAgIFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIHNpZ251cENvbXBsZXRpb25Sb3V0ZTogXCIvc2lnbnVwY29tcGxldGlvbi9cIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDogODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvd2l0aG91dFwiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9zdWJzY3JpcHRpb25cIjogXCIuLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3N1YnNjcmlwdGlvbiRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFmZmljaGVyICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKZSBtZSBjb25uZWN0ZS5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuU2hvd09uV2ViU2l0ZTogXCJMaXJlIGxhIHN1aXRlIHN1ciAjU0lURV9OQU1FXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBkZSBsJ2VucmVnaXN0cmVtZW50ICNJRCBhIMOpY2hvdcOpLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogbGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXMuIFZvdXMgcmVjZXZleiBkZSBjb3VydHMgYXJ0aWNsZXMgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy4gRGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS5cIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiLFxuICAgIHN1YnNjcmlwdGlvbkNhbGw6IFwiSW5zY3JpdmV6LXZvdXMgIVwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIDogXCJUb3VzIGxlcyBhYm9ubsOpcyBvbnQgw6l0w6kgdHJhaXTDqXMgcG91ciBsZSBtb21lbnQuXCIsXG4gICAgaW5mb3NFeHBpcmF0ZWQ6IFwiVm90cmUgYWJvbm5lbWVudCBhIGV4cGlyw6ksIG1haXMgaWwgdm91cyByZXN0ZSBlbmNvcmUgcXVlbHF1ZXMgam91cnMgYXZhbnQgcXVlIHZvdHJlIGNvbXB0ZSBldCB2b3MgZG9ubsOpZXMgbmUgc29pZW50IGNvbXBsw6h0ZW1lbnQgc3VwcHJpbcOpZXMuPGJyPlBvdXIgY2UgZmFpcmUsIHN1aXZleiBzYW5zIHRhcmRlciBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NFeHBpcmF0ZWRBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBhIGV4cGlyw6kuXCIsXG4gICAgaW5mb3NOYkRheXM6IFwiVm90cmUgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi48YnI+Vm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgcHJvbG9uZ2VyIHZvdHJlIGFib25uZW1lbnQgZW4gc3VpdmFudCBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NOYkRheXNBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi5cIixcbiAgICBpbmZvc1BheW1lbnRzQWRtaW4gOiBcIkRBVEVfUEFZTUVOVCA6IHBhaWVtZW50IGRlIEFNT1VOVCDigqwgYXUgbm9tIGRlIENMSUVOVF9OQU1FLlwiLFxuICAgIGlzTm90VmFsaWRlZCA6IFwiQ2V0IHV0aWxpc2F0ZXVyIG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS48YnI+Vm91cyBwb3V2ZXogbGUgZmFpcmUgw6Agc2EgcGxhY2UgPGEgaHJlZj0nI3ZhbGlkYXRpb25Payc+ZW4gY29jaGFudCBsYSBjYXNlIGluZGlxdcOpZTwvYT4gZXQgZW5yZWdpc3RyYW50LlwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlIVE1MOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy48YnI+PGJyPlBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNvdXNjcmlyZSDDoCB1biBhYm9ubmVtZW50IHNhbnMgdGFyZGVyIGVuIGNsaXF1YW50IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLlxcblxcblBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNhbnMgYXR0ZW5kcmUgc291c2NyaXJlIMOgIHVuIGFib25uZW1lbnQgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lTGlua1R4dCA6IFwiTSdhYm9ubmVyLlwiLFxuICAgIG1haWxFbmRGcmVlVGltZU1lc3NhZ2U6IFwiIHJlbGFuY2VzIGVudm95w6llcy5cIixcbiAgICBtYWlsRW5kRnJlZVRpbWVTdWJqZWN0OiBcIlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCB2YSBleHBpcmVyXCIsXG4gICAgbWFpbEV4cGlyYXRpb25Cb2R5SFRNTDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSBhYm9ubmVtZW50IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLjxicj48YnI+UG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgU0lURV9OQU1FLCB2b3VzIHBvdXZleiBsZSBwcm9sb25nZXIgZMOocyBhdWpvdXJkJ2h1aSBlbiBjbGlxdWFudCBzdXIgbGUgbGllbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBtYWlsRXhwaXJhdGlvbkJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm90cmUgYWJvbm5lbWVudCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy5cXG5cXG5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBTSVRFX05BTUUsIHZvdXMgcG91dmV6IGxlIHByb2xvbmdlciBkw6hzIGF1am91cmQnaHVpIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxFeHBpcmF0aW9uTGlua1R4dCA6IFwiUHJvbG9uZ2VyIG1vbiBhYm9ubmVtZW50LlwiLFxuICAgIG1haWxFeHBpcmF0aW9uTWVzc2FnZTogXCJGSVJTVCBwcmVtacOocmVzIGV0IFNFQ09ORCBkZXV4acOobWVzIHJlbGFuY2VzIGVudm95w6llcyBwb3VyIGRlcyBhYm9ubmVtZW50cyBleHBpcmFudCBkJ2ljaSBwZXUuXCIsXG4gICAgbWFpbEV4cGlyYXRpb25SZWxhdW5jaFR4dDogXCJbUmFwcGVsXSBcIixcbiAgICBtYWlsRXhwaXJhdGlvblN1YmplY3Q6IFwiVm90cmUgYWJvbm5lbWVudCB2YSBiaWVudMO0dCBleHBpcmVyXCIsXG4gICAgbWFpbE5ld0VsZW1lbnRGb3JHcm91cFR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm9pY2kgbGUgbGllbiB2ZXJzIGxlIG5vdXZlbCBhcnRpY2xlIMOgIGxpcmUgOlxcblxcblFVRVNUSU9OTkFJUkVfVVJMXFxuXFxuQm9ubmUgbGVjdHVyZSAhXFxuXFxuU3RvcHBlciBsZXMgZW52b2lzID9cXG5VTlNVQlNDUklCRV9VUkxcIixcbiAgICBtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvaWNpIGxlIGxpZW4gdmVycyBsZSBub3V2ZWF1IHF1aXogOlxcblxcblFVRVNUSU9OTkFJUkVfVVJMXFxuXFxuQm9ubmUgbGVjdHVyZSAhXFxuXFxuU3RvcHBlciBsZXMgZW52b2lzID9cXG5VTlNVQlNDUklCRV9VUkxcIixcbiAgICBtYWlsU3RvcE1haWxMaW5rVHh0IDogXCJTdG9wcGVyIGxlcyBlbnZvaXMuXCIsXG4gICAgbmVlZEtub3dJZk5vdGljZU9rIDogXCJJbCBtYW5xdWUgbCdpbmZvcm1hdGlvbiBzdXIgbCdhY2NlcHRhdGlvbiBvdSBub24gZGUgcmVjZXZvaXIgZGVzIG5vdGlmaWNhdGlvbnMuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZiAhXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdEYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0ICh0cm9wIGxvbmd1ZSkuXCIsXG4gICAgbmVlZE51bWJlck9mRGF5cyA6IFwiSWwgZmF1dCB1biBub21icmUgZGUgam91cnMgcG91ciBsJ2Fib25uZW1lbnQuXCIsXG4gICAgbmVlZFVuaXF1ZURheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQuIERvdWJsb24gOiBcIixcbiAgICBuZWVkVmFsaWREYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0LiBDYXJhY3TDqHJlIG5vbiB2YWxpZGUgOiBcIixcbiAgICBub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIDogXCJBdWN1biBub3V2ZWF1IHF1ZXN0aW9ubmFpcmUgdHJvdXbDqSBwb3VyIHVuIGFib25uw6kgOiBcIixcbiAgICB1bnN1YnNjcmlwdGlvbk9rIDogXCJWb3RyZSBkZW1hbmRlIGEgYmllbiDDqXTDqSBwcmlzZSBlbiBjb21wdGUuIFZvdXMgbmUgcmVjZXZyZXogcGx1cyBkZSBtZXNzYWdlcyB2ZW5hbnQgZHUgc2l0ZSwgc2F1ZiBwb3VyIHZvdXMgc2lnbmFsZXIgbGEgZmluIGRlIHZvdHJlIGFib25uZW1lbnQuPGJyPk4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy8jVVJMJz7DoCBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGU8L2E+IHBvdXIgZGUgbm91dmVhdSBhdXRvcmlzZXIgY2VydGFpbnMgZW52b2lzLlwiLFxuICAgIHVuc3Vic2NyaXB0aW9uRmFpbCA6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgbGllbiBkZSBkw6lzYWJvbm5lbWVudCBuZSBmb25jdGlvbm5lIHBhcy48YnI+Vm91cyBwb3V2ZXogPGEgaHJlZj0nLyNVUkwnPmFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZTwvYT4gcG91ciBkw6lzYWN0aXZlciBsZXMgZW52b2lzIG1hbnVlbGxlbWVudC5cIlxufTtcbiIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCLigKZcIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cblxuICAgIC8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuICAgIC8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuICAgIHN0YXRpYyBnZXRQYXNzd29yZCAobmJDYXJNaW4sIG5iQ2FyTWF4KVxuICAgIHtcbiAgICAgICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgICAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICAgICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICAgICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICAgICAge1xuICAgICAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICAgICAgfVxuICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gbGllbnMgZGUgbCdpbnRlcmZhY2VcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiLCB0aXRsZTpcIkFjY8OpZGVyIG91IGNyw6lleiB2b3RyZSBjb21wdGUgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiwgdGl0bGU6XCJFbiBzYXZvaXIgKyBzdXIgV2lraUxlcm5pXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiwgdGl0bGU6XCJQYWdlIGQnYWNjdWVpbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJMZSBibG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIsIHRpdGxlOlwiUXVpIGEgY3LDqcOpIFdpa2lMZXJuaSA/IFF1ZWxzIHNvbnQgdm9zIGRyb2l0cyA/XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiwgdGl0bGU6XCJWb3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2U6IFwiYWRtaW4uaHRtbFwiLFxuICAgIGNndVBhZ2U6IFwiQ0dWLUNHVS5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIiwgICAgXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlVHh0IDogXCJNYSBwYWdlIGQnYWNjdWVpbC5cIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIC8qIFRleHRlcyAoZ8OpbsOpcmFsKSAqL1xuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG4gICAgbGljZW5jZVR4dDogXCJAY29weWxlZnQgTGUgY29udGVudSBkZSBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzID9cXFwiPmVzdCBsaWJyZTwvYT4gZXQgdm91cyBlc3Qgb2ZmZXJ0IHNhbnMgcHVibGljaXTDqS4gVm91cyBwb3V2ZXogPGEgaHJlZj1cXFwiL3BhcnRpY2lwZXItZmluYW5jZW1lbnQuaHRtbFxcXCIgdGl0bGU9XFxcIkZpbmFuY2VtZW50IHBhcnRpY2lwYXRpZiBhdmVjIGNvbnRyZS1wYXJ0aWVzXFxcIj5wYXJ0aWNpcGVyIMOgIHNvbiBmaW5hbmNlbWVudCBlbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIC8qIFBhZ2UgZCdhY2N1ZWlsICovXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPi48YnI+Vm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcywgbGlzaWJsZXMgZW4gcXVlbHF1ZXMgbWludXRlcy48YnI+RGVzIHF1aXpzIHZvdXMgcGVybWV0dGVudCBlbnN1aXRlIGRlIHRlc3RlciBjZSBxdWUgdm91cyBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIDxiPmRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIGN1bHR1cmUgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgamFyZGluPC9iPi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZ8OpbsOpcmFsZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCI8Yj5QYXMgZGUgZmFpdHMgYWx0ZXJuYXRpZnM8L2I+LCB0b3VzIGxlcyBjb250ZW51cyBzb250IDxiPnNvdXJjw6lzIHBhciBkZXMgYXJ0aWNsZXMgV2lraXDDqWRpYTwvYj4uPGJyPkV0IHRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEsIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcHVibGnDqSBzdXIgV2lraUxlcm5pIDxhIGhyZWY9XFxcIi9jcmVkaXRzLmh0bWxcXFwiIHRpdGxlPVxcXCJFbiBzYXZvaXIgcGx1cyBzdXIgY2Ugc3VqZXRcXFwiPnNvbnQgcGFydGFnw6lzIHNvdXMgbGljZW5jZXMgbGlicmVzPC9hPi48YnI+TGUgdG91dCBzYW5zIHB1YmxpY2l0w6ksIG5pIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcy48YnI+PGI+U3VyIFdpa2lMZXJuaSwgdm91cyBjdWx0aXZleiB2b3RyZSBqYXJkaW4gZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48L2I+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgP1wiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6ICBcIlRlc3RleiBXaWtpTGVybmlcIixcbiAgICBob21lU3ViY3JpcHRpb25Gb3JtVGl0bGU6ICBcIlJlY2V2ZXogbGVzIHByb2NoYWlucyBhcnRpY2xlcyBXaWtpTGVybmlcIixcbiAgICAvKiBQYWdlIGRlcm5pw6hyZXMgcHVibGljYXRpb25zLi4uICovICAgXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJXaWtpTGVybmkgOiB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIjxwPjxiPkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIHF1ZWxxdWUgY2hvc2UgZGUgbm91dmVhdTwvYj48YnI+U2kgZGVzc291cyBsZXMgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuIFZvdXMgcG91dmV6IGF1c3NpIDxhIGhyZWY9Jy9xdWl6cy90aGVtZXMuaHRtbCc+cGFyY291cmlyIGxlIHNpdGUgcGFyIHRow6htZXMgb3UgbW90cy1jbMOpczwvYT4uPC9wPlwiLFxuICAgIC8qIFBsYW4gZHUgc2l0ZSwgbGlzdGUgZGVzIHRhZ3MgKi8gICBcbiAgICB0YWdMaXN0VGl0bGU6IFwiQ3VsdHVyZSBnw6luw6lyYWxlIC0gZGVzIGFydGljbGVzIGV0IHF1aXpzIHN1ciBkZSBub21icmV1eCB0aMOobWVzICFcIixcbiAgICB0YWdMaXN0TWV0YURlc2M6IFwiV2lraUxlcm5pIDogZMOpY291dnJpciBsZXMgZGlmZsOpcmVudHMgdGjDqG1lcyBhYm9yZMOpcyBwYXIgV2lraUxlcm5pLiBJbnhleCBkdSBzaXRlLlwiLFxuICAgIHRhZ0xpc3RJbnRybzogXCI8aDM+QXZlYyBXaWtpTGVybmksIGRldmVuZXogZm9ydCBlbiB0aMOobWVzLi4uIE91aSBtYWlzIHF1ZWxzIHRow6htZXMgPyA6KTwvaDM+PGJsb2NrcXVvdGU+QXJpc3RvdGXigK86IMKr4oCvTOKAmWhvbW1lIGEgbmF0dXJlbGxlbWVudCBsYSBwYXNzaW9uIGRlIGNvbm5hw650cmXigKbigK/CuzwvYmxvY2txdW90ZT5cIixcbiAgICAvKiBQYWdlIHF1aXpzICovXG4gICAgYW5zd2Vyc0V4cGxhbmF0aW9uc0xpbmtUZXh0OiBcIlJlbGlyZVwiLFxuICAgIHF1aXpFbGVtZW50TGlua3NJbnRybzogXCJFbiBzYXZvaXIgcGx1c1wiLFxuICAgIHF1aXpFbGVtZW50U3ViY3JpcHRpb25Gb3JtVGl0bGU6IFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaeKArz9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCI8cD5MZSBwcmluY2lwZSBlc3Qgc2ltcGxl4oCvOiA8Yj52b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqTwvYj4uIFB1aXMgdm91cyA8Yj5hZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmU8L2I+LiBTdWl2YW50IGxlcyBxdWVzdGlvbnMsIDxiPnVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzPC9iPiBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIEPigJllc3QgdG91am91cnMgPGI+bGUgY29udGVudSBkZSBs4oCZYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaTwvYj4gY29uY2VybmFudCBsZXMgwqvigK9ib25uZXPigK/CuyByw6lwb25zZXMuIEPigJllc3QgdW5lIGZhw6dvbiBkZSB0ZXN0ZXIgw6AgbGEgZm9pcyB2b3RyZSBjYXBhY2l0w6kgZOKAmWF0dGVudGlvbiBldCB2b3RyZSBtw6ltb2lyZS4gTGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBu4oCZaMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+LjwvcD48cD48Yj5XaWtpTGVybmkgdm91cyBwcm9wb3NlIGTigJlhdXRyZXMgc29sdXRpb25zIHBvdXIgYW3DqWxpb3JlciB2b3RyZSBjdWx0dXJlIGfDqW7DqXJhbGU8L2I+LiBQb3VyIGVuIHNhdm9pciBwbHVzLCBjbGlxdWV6IHN1ciBsZSBib3V0b24gY2ktZGVzc291cy48L3A+XCIsXG4gICAgZXhwbGFuYXRpb25FbGVtZW50VHh0OiBcIjxwPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZGUgPGI+cmVjZXZvaXIgcGFyIGUtbWFpbCDDoCBsYSBmcsOpcXVlbmNlIGNob2lzaWUsIGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzPC9iPiBldCBwb3J0YW50IHN1ciBkZXMgc3VqZXRzIHRyw6hzIHZhcmnDqXMgZGUgPGI+Y3VsdHVyZSBnw6luw6lyYWxlPC9iPiAoYXJ0cywgaGlzdG9pcmUsIGxpdHTDqXJhdHVyZSwgc2NpZW5jZXMsIGV0Yy4pLjwvcD48cD5DZXMgYXJ0aWNsZXMgc29udCBiYXPDqXMgc3VyIDxiPnVuZSBvdSBwbHVzaWV1cnMgcGFnZXMgZGUgV2lraXDDqWRpYTwvYj4gKGZvdXJuaWVzIGVuIGxpZW4pLCBkb250IDxiPmlscyBleHRyYWllbnQgY2VydGFpbmVzIGluZm9ybWF0aW9uczwvYj4uPC9wPjxwPkNoYXF1ZSBzw6lyaWUgZOKAmWFydGljbGVzIGVzdCA8Yj5zdWl2aWUgZOKAmXVuIHF1aXo8L2I+IHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51LjwvcD48cD48Yj5Wb3VzIGFwcHJlbmV6IGFpbnNpIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiB0csOocyBzaW1wbGVtZW50LjwvcD5cIixcbiAgICAvKiBBdXRyZXMgKi9cbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgdHdpdHRlckFjY291bnQ6IFwiV2lraUxlcm5pXCIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEyLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxufTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG5cXG5MZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgdm91cyBwb3V2ZXogbGUgdHJvdXZlciDDoCBjZXR0ZSBhZHJlc3NlIDpcXG5odHRwczovL2ZvcmdlLmNoYXByaWwub3JnL0ZhYl9CbGFiL1dpa2lMZXJuaVxcblxcblBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXogb3UgZCd1biBncm91cGUgZGUgcXVpenNcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykgJiYgKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpIHx8ICFpc0VtcHR5KGFuc3dlci5Hcm91cElkKSkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICAgICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBkYXRhcy5Hcm91cElkPWFuc3dlci5Hcm91cElkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iLCIvLyAtLSBHRVNUSU9OIERFIExBIFBBR0UgUEVSTUVUVEFOVCBERSBTRSBEw4lCT05ORVIgREUgVE9VUyBMRVMgRU5WT0lTXG5cbi8vLyBVbiB0b2tlbiBlc3QgdHJhbnNtaXMgZW4gcGFyYW3DqHRyZSBkZSBsJ1VybC4gSWwgYSB1bmUgdmFsaWRpdMOpIGxpbWl0w6kgZGFucyBsZSB0ZW1wcy4gU2kgbGUgdG9rZW4gZXN0IG9rLCBpbCBuJ2VzdCBwYXMgbsOpY2Vzc2FpcmUgZCfDqnRyZSBjb25uZWN0w6kuXG4vLy8gRGFucyBsZSBjYXMgb8O5IGlsIG4nZXN0IHBsdXMgdmFsaWRlLCBvbiBwZXV0IHByb3Bvc2VyIMOgIGwndXRpbGlzYXRldXIgZGUgc2UgY29ubmVjdGVyIMOgIHNvbiBjb21wdGUgcG91ciBzZSBkw6lzYWJvbm5lci5cbi8vLyBTaSBsZSB0b2tlbiBlc3Qgb2ssIG9uIHZhbGlkZSBlbnJlZ2lzdHJlbWVudCBsZSBkw6lzYWJvbm5lbWVudCBldCBhZmZpY2hlIHVuIG1lc3NhZ2UgZGUgY29uZmlybWF0aW9uXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0ICB7IGFjY291bnRQYWdlIH0gPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5jb25zdCB7IHVzZXJSb3V0ZXMsIHVuc3Vic2NyaWJlUm91dGUgfSA9IHJlcXVpcmUoXCIuLi8uLi9jb25maWcvdXNlcnNcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgeyBzZXJ2ZXJFcnJvciB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgeyB1bnN1YnNjcmlwdGlvbkZhaWwgfSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvc3Vic2NyaXB0aW9uXCIpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHsgXG4gICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICBpZihkYXRhcyAmJiBkYXRhcy50IT09dW5kZWZpbmVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK3Vuc3Vic2NyaWJlUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBhY2NvdW50UGFnZSksIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdW5zdWJzY3JpcHRpb25GYWlsLnJlcGxhY2UoXCIjVVJMXCIsIGFjY291bnRQYWdlKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBzZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9zdWJzY3JpcHRpb24uanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvY2xpZW50c3RvcmFnZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZG9tLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9ldmVyeXdoZXJlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91cmwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy91bnN1YnNjcmliZS5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImRlZmF1bHRSZWNlaXB0RGF5cyIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm1heFF1ZXN0aW9ubmFpcmVTZW5kZWRBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJmaWVsZE5ld1F1ZXN0aW9ubmFpcmVzIiwibmJRdWVzdGlvbm5haXJlc0J5R3JvdXBNaW4iLCJuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heCIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlcyIsImRpcldlYlF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJyZWdlbmVyYXRlSFRNTCIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJncm91cFJvdXRlcyIsImdldEdyb3VwUm91dGUiLCJwcmV2aWV3R3JvdXBSb3V0ZXMiLCJzZWFyY2hHcm91cHNSb3V0ZSIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0QWRtaW5TdGF0cyIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsInNhdmVBbnN3ZXJzUm91dGUiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIkdyb3VwIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsInNlYXJjaCIsInNlYXJjaEdyb3VwcyIsImRpckNhY2hlR3JvdXBzIiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTEdyb3VwcyIsImRpckhUTUxOZXdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJHcm91cHMiLCJkaXJXZWJOZXdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsInVzZXJSb3V0ZXMiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiY3JlYXRlVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwiZ2V0VXNlckluZm9zIiwiZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoVXNlclJvdXRlIiwic2lnbnVwQ29tcGxldGlvblJvdXRlIiwic3Vic2NyaWJlUm91dGUiLCJ1bnN1YnNjcmliZVJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwidmFsaWRhdGVVc2VyUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsImRpckNhY2hlVXNlcnNXaXRob3V0QW5zd2VycyIsImFkZEJ0blR4dCIsImFkZE9rTWVzc2FnZSIsImFsZXJ0TmV3V2luZG93IiwiYmFkVXJsIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blNob3dPbldlYlNpdGUiLCJkZWxldGVCdG5UeHQiLCJkZWxldGVGYWlsTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhDcm9uIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhUb2tlbiIsIm5lZWRlZFBhcmFtcyIsIm5leHRQYWdlIiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwibm90VmFsaWRGb3JtYXQiLCJwcmV2aW91c1BhZ2UiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2NyaXB0VGltaW5nSW5mbyIsInN0YXRzQWRtaW4iLCJzdWJzY3JpcHRpb25DYWxsIiwidXBkYXRlQnRuVHh0IiwidXBkYXRlT2tNZXNzYWdlIiwiYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIiwiaW5mb3NFeHBpcmF0ZWQiLCJpbmZvc0V4cGlyYXRlZEFkbWluIiwiaW5mb3NOYkRheXMiLCJpbmZvc05iRGF5c0FkbWluIiwiaW5mb3NQYXltZW50c0FkbWluIiwiaXNOb3RWYWxpZGVkIiwibWFpbEVuZEZyZWVUaW1lQm9keUhUTUwiLCJtYWlsRW5kRnJlZVRpbWVCb2R5VHh0IiwibWFpbEVuZEZyZWVUaW1lTGlua1R4dCIsIm1haWxFbmRGcmVlVGltZU1lc3NhZ2UiLCJtYWlsRW5kRnJlZVRpbWVTdWJqZWN0IiwibWFpbEV4cGlyYXRpb25Cb2R5SFRNTCIsIm1haWxFeHBpcmF0aW9uQm9keVR4dCIsIm1haWxFeHBpcmF0aW9uTGlua1R4dCIsIm1haWxFeHBpcmF0aW9uTWVzc2FnZSIsIm1haWxFeHBpcmF0aW9uUmVsYXVuY2hUeHQiLCJtYWlsRXhwaXJhdGlvblN1YmplY3QiLCJtYWlsTmV3RWxlbWVudEZvckdyb3VwVHh0IiwibWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5VHh0IiwibWFpbFN0b3BNYWlsTGlua1R4dCIsIm5lZWRLbm93SWZOb3RpY2VPayIsIm5lZWRJbnRlZ2VyTnVtYmVyT2ZEYXlzIiwibmVlZE1pbk51bWJlck9mRGF5cyIsIm5lZWROb3RUb29Mb25nRGF5c0xpc3QiLCJuZWVkTnVtYmVyT2ZEYXlzIiwibmVlZFVuaXF1ZURheXNMaXN0IiwibmVlZFZhbGlkRGF5c0xpc3QiLCJub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIiwidW5zdWJzY3JpcHRpb25PayIsInVuc3Vic2NyaXB0aW9uRmFpbCIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsImkiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJ0YWdzTGlzdFR4dCIsImFib3V0UGFnZSIsImNndVBhZ2UiLCJkZWxldGVMaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJ1c2VySG9tZVBhZ2VUeHQiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJtYWlsUmVjaXBpZW50VHh0IiwibGljZW5jZVR4dCIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsImhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZSIsIm5ld3NMaXN0VGl0bGUiLCJ0YWdMaXN0VGl0bGUiLCJ0YWdMaXN0TWV0YURlc2MiLCJ0YWdMaXN0SW50cm8iLCJhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQiLCJxdWl6RWxlbWVudExpbmtzSW50cm8iLCJxdWl6RWxlbWVudFN1YmNyaXB0aW9uRm9ybVRpdGxlIiwiZXhwbGFuYXRpb25FbGVtZW50VHh0IiwidHdpdHRlckFjY291bnQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRMb2NhbHkiLCJqc29uIiwicGFyc2UiLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImFkZEVsZW1lbnQiLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImlubmVySFRNTCIsImFwcGVuZENoaWxkIiwiaGVsbG9EZXYiLCJjb25zb2xlIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJnZXRFbGVtZW50QnlJZCIsImhvbWVQYWdlIiwiZ2V0VXJsUGFyYW1zIiwibG9jYXRpb24iLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRhdGFzIiwiZGVjb2RlVVJJIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJ0b2tlbiIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwibmJRdWVzdGlvbnMiLCJRdWVzdGlvbm5haXJlSWQiLCJHcm91cElkIiwiY2hlY2tTZXNzaW9uIiwidXJsUmVkaXJlY3Rpb24iLCJtZXNzYWdlIiwidXJsV2FudGVkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ1c2VyIiwibm93IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25sb2FkIiwicmVzcG9uc2UiLCJyZXNwb25zZVRleHQiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsIndpbmRvdyIsImluZGV4T2YiLCJhc3NpZ24iLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsInNlbmQiLCJkaXZSZXNwb25zZSIsImluaXRpYWxpc2UiLCJ0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJlIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7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QXpCLEVBQWlDbUMsV0FBakMsQ0FBbkIsRUFBa0UsRUFBbEUsRUFBc0UsQ0FBQyxTQUFELENBQXRFLENBQVYsQ0FESixLQUdJcUQsZ0VBQVUsQ0FBQzhFLFdBQUQsRUFBYyxHQUFkLEVBQW1CdEwsa0JBQWtCLENBQUNnQixPQUFuQixDQUEyQixNQUEzQixFQUFtQ21DLFdBQW5DLENBQW5CLEVBQW9FLEVBQXBFLEVBQXdFLENBQUMsT0FBRCxDQUF4RSxDQUFWO0FBQ1A7QUFDSixPQVZEOztBQVdBa0gsU0FBRyxDQUFDZ0IsSUFBSjtBQUNIO0FBQ0osR0FwQkQsQ0FxQkEsT0FBTU8sQ0FBTixFQUNBO0FBQ0lwRixvRUFBVSxDQUFDOEUsV0FBRCxFQUFjLEdBQWQsRUFBbUI5TixXQUFuQixFQUFnQyxFQUFoQyxFQUFvQyxDQUFDLE9BQUQsQ0FBcEMsQ0FBVjtBQUNIO0FBQ0osQ0EzQkQ7O0FBNEJBK04sVUFBVSxHIiwiZmlsZSI6Ii4vSlMvdW5zdWJzY3JpYmUuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvdW5zdWJzY3JpYmUuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgZGVmYXVsdFJlY2VpcHREYXlzOiBcIjE0N1wiLCAvLyBQYXIgZMOpZmF1dCwgcXVlbChzKSBqb3VyKHMpIGRlIGxhIHNlbWFpbmUsIGwndXRpbGlzYXRldXIgcmXDp29pdC1pbCBxdWVscXVlIGNob3NlID8gKDE9ZGltYW5jaGUsIDI9bHVuZGkuLi4gNz1zYW1lZGkpXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAwLC8vIGlmIDAgPSB1bmxpbWl0ZWRcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTAsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDMsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMiwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46NywgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjIxLCAvLyBpZGVtXG4gICAgbWF4UXVlc3Rpb25uYWlyZVNlbmRlZEF0U2FtZVRpbWU6IDUwLCAvLyBmb3Igc3Vic2NyaXB0aW9uJ3MgZS1tYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgZmllbGROZXdRdWVzdGlvbm5haXJlcyA6IFwicHVibGlzaGluZ0F0XCIsIC8vIGZpZWxkIHRvIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBsaXN0IG9mIHRoZSBsYXN0IHF1ZXN0aW9ubmFpcmVzLCBjYW4gYmUgXCJjcmVhdGVkQXRcIiwgXCJ1cGRhdGVkQXRcIiBvciBcInB1Ymxpc2hpbmdBdFwiXG4gICAgLy8gR3JvdXBzIDpcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1pbjogMSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzQnlHcm91cE1heDogMCxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMSxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA1MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDAsXG4gICAgLy8gUXVlc3Rpb25zICYgcmVzcG9uc2VzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZXNcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLC8vIGxhIGJhc2Ugw6AgbGFxdWVsbGUgcydham91dGUgbGVzIHJvdXRlcyBzdWl2YW50ZXNcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIiwgXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gZ3JvdXBlcyA6XG4gICAgZ3JvdXBSb3V0ZXM6IFwiL2dyb3VwXCIsXG4gICAgZ2V0R3JvdXBSb3V0ZTogXCIvZ2V0L1wiLFxuICAgIHByZXZpZXdHcm91cFJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHNlYXJjaEdyb3Vwc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLC8vIGZvbmN0aW9ubmUgYXVzc2kgcG91ciBsZXMgZ3JvdXBlc1xuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIiwvLyBpZGVtXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBHcm91cCA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgbGFpc3PDqSB2aWRlIGRhbnMgbGUgZm9ybXVsYWlyZVxuICAgIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2hHcm91cHM6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIEVtcGxhY2VtZW50IGRlcyBmaWNoaWVycyBKU09OIGfDqW7DqXLDqXMgOlxuICAgIGRpckNhY2hlR3JvdXBzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9ncm91cHNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgLy8gRW1wbGFjZW1lbnQgZGVzIGZpY2hpZXJzIEhUTUwgZ8OpbsOpcsOpcyA6XG4gICAgZGlySFRNTEdyb3VwcyA6IFwiZnJvbnQvcHVibGljL3F1aXovZ3BcIixcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZXMgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTE5ld3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICAvLyBJZGVtIG1haXMgcG91ciB1cmxzIDpcbiAgICBkaXJXZWJHcm91cHMgOiBcInF1aXovZ3BcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlcyA6IFwicXVpelwiLFxuICAgIGRpcldlYk5ld3MgOiBcInF1aXpzL1wiLFxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzL1wiLFxuICAgIC8vIGxpbWl0ZSBkZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUsIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmQgOlxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMsXG4gICAgLyogVmFsZXVycyBlbiBmYWl0IGTDqWZpbmllcyBkYW5zIGluc3RhbmNlLmpzIGRvbmMgw6Agc3VwcHJpbWVyIHF1YW5kIHBsdXMgdXRpbGlzw6llcyBhaWxsZXVycyA6ICovXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsICAgXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIiwgICAgXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgZ2V0VXNlcnNRdWVzdGlvbm5haXJlc1JvdXRlOiBcIi9nZXR1c2Vyc3F1ZXN0aW9ubmFpcmVzL1wiLC8vIGxlcyBxdWVzdGlvbm5haXJlcyBhdXhxdWVscyBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIGV1IGFjY8OocyB2aWEgc29uIGFib25uZW1lbnQgICAgXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgc2lnbnVwQ29tcGxldGlvblJvdXRlOiBcIi9zaWdudXBjb21wbGV0aW9uL1wiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzZWFyY2g6IHsgbWlubGVuZ3RoOiAxLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4OiA4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1dpdGhvdXRBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy93aXRob3V0XCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3N1YnNjcmlwdGlvblwiOiBcIi4uL2xhbmcvZnIvc3Vic2NyaXB0aW9uLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvc3Vic2NyaXB0aW9uJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWZmaWNoZXIgIVwiLFxuICAgIGJ0blByb3Bvc2VDb25uZWN0aW9uOiBcIkplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blByb3Bvc2VTdWJzY3JpYmU6IFwiSmUgY3LDqWUgbW9uIGNvbXB0ZS5cIixcbiAgICBidG5TaG93T25XZWJTaXRlOiBcIkxpcmUgbGEgc3VpdGUgc3VyICNTSVRFX05BTUVcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGRlIGwnZW5yZWdpc3RyZW1lbnQgI0lEIGEgw6ljaG91w6kuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBsYSBjdWx0dXJlIGfDqW7DqXJhbGUgZW4gbGliZXJ0w6lcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIGNob3Nlcy4gVm91cyByZWNldmV6IGRlIGNvdXJ0cyBhcnRpY2xlcyBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLiBEZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51LlwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCIsXG4gICAgc3Vic2NyaXB0aW9uQ2FsbDogXCJJbnNjcml2ZXotdm91cyAhXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhbGxTdWJzY3JpcHRpb25Qcm9jZXNzZWQgOiBcIlRvdXMgbGVzIGFib25uw6lzIG9udCDDqXTDqSB0cmFpdMOpcyBwb3VyIGxlIG1vbWVudC5cIixcbiAgICBpbmZvc0V4cGlyYXRlZDogXCJWb3RyZSBhYm9ubmVtZW50IGEgZXhwaXLDqSwgbWFpcyBpbCB2b3VzIHJlc3RlIGVuY29yZSBxdWVscXVlcyBqb3VycyBhdmFudCBxdWUgdm90cmUgY29tcHRlIGV0IHZvcyBkb25uw6llcyBuZSBzb2llbnQgY29tcGzDqHRlbWVudCBzdXBwcmltw6llcy48YnI+UG91ciBjZSBmYWlyZSwgc3VpdmV6IHNhbnMgdGFyZGVyIGxlcyBpbmRpY2F0aW9ucyBjaS1kZXNzb3VzIDpcIixcbiAgICBpbmZvc0V4cGlyYXRlZEFkbWluOiBcIkNldCBhYm9ubmVtZW50IGEgZXhwaXLDqS5cIixcbiAgICBpbmZvc05iRGF5czogXCJWb3RyZSBhYm9ubmVtZW50IGVzdCBlbmNvcmUgdmFsYWJsZSA8Yj5wZW5kYW50IE5CX0RBWVMgam91cnM8L2I+Ljxicj5Wb3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCBwcm9sb25nZXIgdm90cmUgYWJvbm5lbWVudCBlbiBzdWl2YW50IGxlcyBpbmRpY2F0aW9ucyBjaS1kZXNzb3VzIDpcIixcbiAgICBpbmZvc05iRGF5c0FkbWluOiBcIkNldCBhYm9ubmVtZW50IGVzdCBlbmNvcmUgdmFsYWJsZSA8Yj5wZW5kYW50IE5CX0RBWVMgam91cnM8L2I+LlwiLFxuICAgIGluZm9zUGF5bWVudHNBZG1pbiA6IFwiREFURV9QQVlNRU5UIDogcGFpZW1lbnQgZGUgQU1PVU5UIOKCrCBhdSBub20gZGUgQ0xJRU5UX05BTUUuXCIsXG4gICAgaXNOb3RWYWxpZGVkIDogXCJDZXQgdXRpbGlzYXRldXIgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLjxicj5Wb3VzIHBvdXZleiBsZSBmYWlyZSDDoCBzYSBwbGFjZSA8YSBocmVmPScjdmFsaWRhdGlvbk9rJz5lbiBjb2NoYW50IGxhIGNhc2UgaW5kaXF1w6llPC9hPiBldCBlbnJlZ2lzdHJhbnQuXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lQm9keUhUTUw6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLjxicj48YnI+UG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogc291c2NyaXJlIMOgIHVuIGFib25uZW1lbnQgc2FucyB0YXJkZXIgZW4gY2xpcXVhbnQgc3VyIGxlIGxpZW4gY2ktZGVzc291cy48L3A+XCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lQm9keVR4dDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuXFxuXFxuUG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogc2FucyBhdHRlbmRyZSBzb3VzY3JpcmUgw6AgdW4gYWJvbm5lbWVudCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRW5kRnJlZVRpbWVMaW5rVHh0IDogXCJNJ2Fib25uZXIuXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lTWVzc2FnZTogXCIgcmVsYW5jZXMgZW52b3nDqWVzLlwiLFxuICAgIG1haWxFbmRGcmVlVGltZVN1YmplY3Q6IFwiVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IHZhIGV4cGlyZXJcIixcbiAgICBtYWlsRXhwaXJhdGlvbkJvZHlIVE1MOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIGFib25uZW1lbnQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuPGJyPjxicj5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBTSVRFX05BTUUsIHZvdXMgcG91dmV6IGxlIHByb2xvbmdlciBkw6hzIGF1am91cmQnaHVpIGVuIGNsaXF1YW50IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIG1haWxFeHBpcmF0aW9uQm9keVR4dDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3RyZSBhYm9ubmVtZW50IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLlxcblxcblBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIFNJVEVfTkFNRSwgdm91cyBwb3V2ZXogbGUgcHJvbG9uZ2VyIGTDqHMgYXVqb3VyZCdodWkgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbEV4cGlyYXRpb25MaW5rVHh0IDogXCJQcm9sb25nZXIgbW9uIGFib25uZW1lbnQuXCIsXG4gICAgbWFpbEV4cGlyYXRpb25NZXNzYWdlOiBcIkZJUlNUIHByZW1pw6hyZXMgZXQgU0VDT05EIGRldXhpw6htZXMgcmVsYW5jZXMgZW52b3nDqWVzIHBvdXIgZGVzIGFib25uZW1lbnRzIGV4cGlyYW50IGQnaWNpIHBldS5cIixcbiAgICBtYWlsRXhwaXJhdGlvblJlbGF1bmNoVHh0OiBcIltSYXBwZWxdIFwiLFxuICAgIG1haWxFeHBpcmF0aW9uU3ViamVjdDogXCJWb3RyZSBhYm9ubmVtZW50IHZhIGJpZW50w7R0IGV4cGlyZXJcIixcbiAgICBtYWlsTmV3RWxlbWVudEZvckdyb3VwVHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb2ljaSBsZSBsaWVuIHZlcnMgbGUgbm91dmVsIGFydGljbGUgw6AgbGlyZSA6XFxuXFxuUVVFU1RJT05OQUlSRV9VUkxcXG5cXG5Cb25uZSBsZWN0dXJlICFcXG5cXG5TdG9wcGVyIGxlcyBlbnZvaXMgP1xcblVOU1VCU0NSSUJFX1VSTFwiLFxuICAgIG1haWxOZXdRdWVzdGlvbm5haXJlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm9pY2kgbGUgbGllbiB2ZXJzIGxlIG5vdXZlYXUgcXVpeiA6XFxuXFxuUVVFU1RJT05OQUlSRV9VUkxcXG5cXG5Cb25uZSBsZWN0dXJlICFcXG5cXG5TdG9wcGVyIGxlcyBlbnZvaXMgP1xcblVOU1VCU0NSSUJFX1VSTFwiLFxuICAgIG1haWxTdG9wTWFpbExpbmtUeHQgOiBcIlN0b3BwZXIgbGVzIGVudm9pcy5cIixcbiAgICBuZWVkS25vd0lmTm90aWNlT2sgOiBcIklsIG1hbnF1ZSBsJ2luZm9ybWF0aW9uIHN1ciBsJ2FjY2VwdGF0aW9uIG91IG5vbiBkZSByZWNldm9pciBkZXMgbm90aWZpY2F0aW9ucy5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlck9mRGF5cyA6IFwiTGUgbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudCBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIuXCIsXG4gICAgbmVlZE1pbk51bWJlck9mRGF5cyA6IFwiTGUgbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudCBuZSBwZXV0IMOqdHJlIG7DqWdhdGlmICFcIixcbiAgICBuZWVkTm90VG9vTG9uZ0RheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQgKHRyb3AgbG9uZ3VlKS5cIixcbiAgICBuZWVkTnVtYmVyT2ZEYXlzIDogXCJJbCBmYXV0IHVuIG5vbWJyZSBkZSBqb3VycyBwb3VyIGwnYWJvbm5lbWVudC5cIixcbiAgICBuZWVkVW5pcXVlRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdC4gRG91YmxvbiA6IFwiLFxuICAgIG5lZWRWYWxpZERheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQuIENhcmFjdMOocmUgbm9uIHZhbGlkZSA6IFwiLFxuICAgIG5vTmV3UXVlc3Rpb25uYWlyZUZvclVzZXIgOiBcIkF1Y3VuIG5vdXZlYXUgcXVlc3Rpb25uYWlyZSB0cm91dsOpIHBvdXIgdW4gYWJvbm7DqSA6IFwiLFxuICAgIHVuc3Vic2NyaXB0aW9uT2sgOiBcIlZvdHJlIGRlbWFuZGUgYSBiaWVuIMOpdMOpIHByaXNlIGVuIGNvbXB0ZS4gVm91cyBuZSByZWNldnJleiBwbHVzIGRlIG1lc3NhZ2VzIHZlbmFudCBkdSBzaXRlLCBzYXVmIHBvdXIgdm91cyBzaWduYWxlciBsYSBmaW4gZGUgdm90cmUgYWJvbm5lbWVudC48YnI+Tidow6lzaXRleiBwYXMgPGEgaHJlZj0nLyNVUkwnPsOgIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZTwvYT4gcG91ciBkZSBub3V2ZWF1IGF1dG9yaXNlciBjZXJ0YWlucyBlbnZvaXMuXCIsXG4gICAgdW5zdWJzY3JpcHRpb25GYWlsIDogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBsaWVuIGRlIGTDqXNhYm9ubmVtZW50IG5lIGZvbmN0aW9ubmUgcGFzLjxicj5Wb3VzIHBvdXZleiA8YSBocmVmPScvI1VSTCc+YWNjw6lkZXIgw6Agdm90cmUgY29tcHRlPC9hPiBwb3VyIGTDqXNhY3RpdmVyIGxlcyBlbnZvaXMgbWFudWVsbGVtZW50LlwiXG59O1xuIiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIuKAplwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxuXG4gICAgLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4gICAgLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG4gICAgc3RhdGljIGdldFBhc3N3b3JkIChuYkNhck1pbiwgbmJDYXJNYXgpXG4gICAge1xuICAgICAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgICAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgICAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICAgICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgICAgICB9XG4gICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgICAgICByZXR1cm4gcGFzc3dvcmQ7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBsaWVucyBkZSBsJ2ludGVyZmFjZVxuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9uc1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIsIHRpdGxlOlwiQWNjw6lkZXIgb3UgY3LDqWV6IHZvdHJlIGNvbXB0ZSBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiLCB0aXRsZTpcIkVuIHNhdm9pciArIHN1ciBXaWtpTGVybmlcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiLCB0aXRsZTpcIlBhZ2UgZCdhY2N1ZWlsXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkxlIGJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiwgdGl0bGU6XCJRdWkgYSBjcsOpw6kgV2lraUxlcm5pID8gUXVlbHMgc29udCB2b3MgZHJvaXRzID9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiLCB0aXRsZTpcIlZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMgc3VyIFdpa2lMZXJuaVwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZTogXCJhZG1pbi5odG1sXCIsXG4gICAgY2d1UGFnZTogXCJDR1YtQ0dVLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLCAgICBcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICB1c2VySG9tZVBhZ2VUeHQgOiBcIk1hIHBhZ2UgZCdhY2N1ZWlsLlwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgLyogVGV4dGVzIChnw6luw6lyYWwpICovXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbiAgICBsaWNlbmNlVHh0OiBcIkBjb3B5bGVmdCBMZSBjb250ZW51IGRlIFdpa2lMZXJuaSA8YSBocmVmPVxcXCIvY3JlZGl0cy5odG1sXFxcIiB0aXRsZT1cXFwiRW4gc2F2b2lyIHBsdXMgP1xcXCI+ZXN0IGxpYnJlPC9hPiBldCB2b3VzIGVzdCBvZmZlcnQgc2FucyBwdWJsaWNpdMOpLiBWb3VzIHBvdXZleiA8YSBocmVmPVxcXCIvcGFydGljaXBlci1maW5hbmNlbWVudC5odG1sXFxcIiB0aXRsZT1cXFwiRmluYW5jZW1lbnQgcGFydGljaXBhdGlmIGF2ZWMgY29udHJlLXBhcnRpZXNcXFwiPnBhcnRpY2lwZXIgw6Agc29uIGZpbmFuY2VtZW50IGVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgLyogUGFnZSBkJ2FjY3VlaWwgKi9cbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiPGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+Ljxicj5Wb3VzIHJlY2V2ZXogZGUgY291cnRzIGFydGljbGVzLCBsaXNpYmxlcyBlbiBxdWVscXVlcyBtaW51dGVzLjxicj5EZXMgcXVpenMgdm91cyBwZXJtZXR0ZW50IGVuc3VpdGUgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgPGI+ZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgY3VsdHVyZSBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBqYXJkaW48L2I+LlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBnw6luw6lyYWxlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIjxiPlBhcyBkZSBmYWl0cyBhbHRlcm5hdGlmczwvYj4sIHRvdXMgbGVzIGNvbnRlbnVzIHNvbnQgPGI+c291cmPDqXMgcGFyIGRlcyBhcnRpY2xlcyBXaWtpcMOpZGlhPC9iPi48YnI+RXQgdG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwdWJsacOpIHN1ciBXaWtpTGVybmkgPGEgaHJlZj1cXFwiL2NyZWRpdHMuaHRtbFxcXCIgdGl0bGU9XFxcIkVuIHNhdm9pciBwbHVzIHN1ciBjZSBzdWpldFxcXCI+c29udCBwYXJ0YWfDqXMgc291cyBsaWNlbmNlcyBsaWJyZXM8L2E+Ljxicj5MZSB0b3V0IHNhbnMgcHVibGljaXTDqSwgbmkgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzLjxicj48Yj5TdXIgV2lraUxlcm5pLCB2b3VzIGN1bHRpdmV6IHZvdHJlIGphcmRpbiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjwvYj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSA/XCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogIFwiVGVzdGV6IFdpa2lMZXJuaVwiLFxuICAgIGhvbWVTdWJjcmlwdGlvbkZvcm1UaXRsZTogIFwiUmVjZXZleiBsZXMgcHJvY2hhaW5zIGFydGljbGVzIFdpa2lMZXJuaVwiLFxuICAgIC8qIFBhZ2UgZGVybmnDqHJlcyBwdWJsaWNhdGlvbnMuLi4gKi8gICBcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkN1bHR1cmUgZ8OpbsOpcmFsZSAtIGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIldpa2lMZXJuaSA6IHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiPHA+PGI+QXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgcXVlbHF1ZSBjaG9zZSBkZSBub3V2ZWF1PC9iPjxicj5TaSBkZXNzb3VzIGxlcyBkZXJuacOocmVzIHB1YmxpY2F0aW9ucy4gVm91cyBwb3V2ZXogYXVzc2kgPGEgaHJlZj0nL3F1aXpzL3RoZW1lcy5odG1sJz5wYXJjb3VyaXIgbGUgc2l0ZSBwYXIgdGjDqG1lcyBvdSBtb3RzLWNsw6lzPC9hPi48L3A+XCIsXG4gICAgLyogUGxhbiBkdSBzaXRlLCBsaXN0ZSBkZXMgdGFncyAqLyAgIFxuICAgIHRhZ0xpc3RUaXRsZTogXCJDdWx0dXJlIGfDqW7DqXJhbGUgLSBkZXMgYXJ0aWNsZXMgZXQgcXVpenMgc3VyIGRlIG5vbWJyZXV4IHRow6htZXMgIVwiLFxuICAgIHRhZ0xpc3RNZXRhRGVzYzogXCJXaWtpTGVybmkgOiBkw6ljb3V2cmlyIGxlcyBkaWZmw6lyZW50cyB0aMOobWVzIGFib3Jkw6lzIHBhciBXaWtpTGVybmkuIElueGV4IGR1IHNpdGUuXCIsXG4gICAgdGFnTGlzdEludHJvOiBcIjxoMz5BdmVjIFdpa2lMZXJuaSwgZGV2ZW5leiBmb3J0IGVuIHRow6htZXMuLi4gT3VpIG1haXMgcXVlbHMgdGjDqG1lcyA/IDopPC9oMz48YmxvY2txdW90ZT5BcmlzdG90ZeKArzogwqvigK9M4oCZaG9tbWUgYSBuYXR1cmVsbGVtZW50IGxhIHBhc3Npb24gZGUgY29ubmHDrnRyZeKApuKAr8K7PC9ibG9ja3F1b3RlPlwiLFxuICAgIC8qIFBhZ2UgcXVpenMgKi9cbiAgICBhbnN3ZXJzRXhwbGFuYXRpb25zTGlua1RleHQ6IFwiUmVsaXJlXCIsXG4gICAgcXVpekVsZW1lbnRMaW5rc0ludHJvOiBcIkVuIHNhdm9pciBwbHVzXCIsXG4gICAgcXVpekVsZW1lbnRTdWJjcmlwdGlvbkZvcm1UaXRsZTogXCJSZWNldmV6IGxlcyBwcm9jaGFpbnMgYXJ0aWNsZXMgV2lraUxlcm5pXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5p4oCvP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIjxwPkxlIHByaW5jaXBlIGVzdCBzaW1wbGXigK86IDxiPnZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpPC9iPi4gUHVpcyB2b3VzIDxiPmFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZTwvYj4uIFN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgPGI+dW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXM8L2I+IGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gQ+KAmWVzdCB0b3Vqb3VycyA8Yj5sZSBjb250ZW51IGRlIGzigJlhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pPC9iPiBjb25jZXJuYW50IGxlcyDCq+KAr2Jvbm5lc+KAr8K7IHLDqXBvbnNlcy4gQ+KAmWVzdCB1bmUgZmHDp29uIGRlIHRlc3RlciDDoCBsYSBmb2lzIHZvdHJlIGNhcGFjaXTDqSBk4oCZYXR0ZW50aW9uIGV0IHZvdHJlIG3DqW1vaXJlLiBMZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG7igJlow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPC9wPjxwPjxiPldpa2lMZXJuaSB2b3VzIHByb3Bvc2UgZOKAmWF1dHJlcyBzb2x1dGlvbnMgcG91ciBhbcOpbGlvcmVyIHZvdHJlIGN1bHR1cmUgZ8OpbsOpcmFsZTwvYj4uIFBvdXIgZW4gc2F2b2lyIHBsdXMsIGNsaXF1ZXogc3VyIGxlIGJvdXRvbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBleHBsYW5hdGlvbkVsZW1lbnRUeHQ6IFwiPHA+V2lraUxlcm5pIHZvdXMgcHJvcG9zZSBkZSA8Yj5yZWNldm9pciBwYXIgZS1tYWlsIMOgIGxhIGZyw6lxdWVuY2UgY2hvaXNpZSwgZGUgY291cnRzIGFydGljbGVzIGxpc2libGVzIGVuIHF1ZWxxdWVzIG1pbnV0ZXM8L2I+IGV0IHBvcnRhbnQgc3VyIGRlcyBzdWpldHMgdHLDqHMgdmFyacOpcyBkZSA8Yj5jdWx0dXJlIGfDqW7DqXJhbGU8L2I+IChhcnRzLCBoaXN0b2lyZSwgbGl0dMOpcmF0dXJlLCBzY2llbmNlcywgZXRjLikuPC9wPjxwPkNlcyBhcnRpY2xlcyBzb250IGJhc8OpcyBzdXIgPGI+dW5lIG91IHBsdXNpZXVycyBwYWdlcyBkZSBXaWtpcMOpZGlhPC9iPiAoZm91cm5pZXMgZW4gbGllbiksIGRvbnQgPGI+aWxzIGV4dHJhaWVudCBjZXJ0YWluZXMgaW5mb3JtYXRpb25zPC9iPi48L3A+PHA+Q2hhcXVlIHPDqXJpZSBk4oCZYXJ0aWNsZXMgZXN0IDxiPnN1aXZpZSBk4oCZdW4gcXVpejwvYj4gcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPC9wPjxwPjxiPlZvdXMgYXBwcmVuZXogYWluc2kgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+IHRyw6hzIHNpbXBsZW1lbnQuPC9wPlwiLFxuICAgIC8qIEF1dHJlcyAqL1xuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICB0d2l0dGVyQWNjb3VudDogXCJXaWtpTGVybmlcIixcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTIsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG59OyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcblxcbkxlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCB2b3VzIHBvdXZleiBsZSB0cm91dmVyIMOgIGNldHRlIGFkcmVzc2UgOlxcbmh0dHBzOi8vZm9yZ2UuY2hhcHJpbC5vcmcvRmFiX0JsYWIvV2lraUxlcm5pXFxuXFxuUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpeiBvdSBkJ3VuIGdyb3VwZSBkZSBxdWl6c1xuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAoIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgfHwgIWlzRW1wdHkoYW5zd2VyLkdyb3VwSWQpKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgICAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGRhdGFzLkdyb3VwSWQ9YW5zd2VyLkdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSIsIi8vIC0tIEdFU1RJT04gREUgTEEgUEFHRSBQRVJNRVRUQU5UIERFIFNFIETDiUJPTk5FUiBERSBUT1VTIExFUyBFTlZPSVNcblxuLy8vIFVuIHRva2VuIGVzdCB0cmFuc21pcyBlbiBwYXJhbcOodHJlIGRlIGwnVXJsLiBJbCBhIHVuZSB2YWxpZGl0w6kgbGltaXTDqSBkYW5zIGxlIHRlbXBzLiBTaSBsZSB0b2tlbiBlc3Qgb2ssIGlsIG4nZXN0IHBhcyBuw6ljZXNzYWlyZSBkJ8OqdHJlIGNvbm5lY3TDqS5cbi8vLyBEYW5zIGxlIGNhcyBvw7kgaWwgbidlc3QgcGx1cyB2YWxpZGUsIG9uIHBldXQgcHJvcG9zZXIgw6AgbCd1dGlsaXNhdGV1ciBkZSBzZSBjb25uZWN0ZXIgw6Agc29uIGNvbXB0ZSBwb3VyIHNlIGTDqXNhYm9ubmVyLlxuLy8vIFNpIGxlIHRva2VuIGVzdCBvaywgb24gdmFsaWRlIGVucmVnaXN0cmVtZW50IGxlIGTDqXNhYm9ubmVtZW50IGV0IGFmZmljaGUgdW4gbWVzc2FnZSBkZSBjb25maXJtYXRpb25cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgIHsgYWNjb3VudFBhZ2UgfSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmNvbnN0IHsgdXNlclJvdXRlcywgdW5zdWJzY3JpYmVSb3V0ZSB9ID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBzZXRTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB7IHNlcnZlckVycm9yIH0gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB7IHVuc3Vic2NyaXB0aW9uRmFpbCB9ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9zdWJzY3JpcHRpb25cIik7XG5cbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAgeyBcbiAgICAgICAgY29uc3QgZGF0YXM9Z2V0VXJsUGFyYW1zKCk7XG4gICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrdW5zdWJzY3JpYmVSb3V0ZStkYXRhcy50KTtcbiAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLnJlcGxhY2UoXCIjVVJMXCIsIGFjY291bnRQYWdlKSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB1bnN1YnNjcmlwdGlvbkZhaWwucmVwbGFjZShcIiNVUkxcIiwgYWNjb3VudFBhZ2UpLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 81a0706..edd29e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,4684 @@ { "name": "WikiLerni", "version": "0.2.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "WikiLerni", + "version": "0.2.0", + "license": "GPL-3.0-or-later", + "dependencies": { + "bcrypt": "^5.0.1", + "body-parser": "^1.19.0", + "dotenv": "^8.2.0", + "express": "^4.17.1", + "fs-extra": "^9.1.0", + "g": "^2.0.1", + "jsonwebtoken": "^8.5.1", + "log4js": "^6.3.0", + "md5": "^2.3.0", + "multer": "^1.4.2", + "mysql2": "^2.2.5", + "nodemailer": "^6.5.0", + "pug": "^2.0.4", + "sequelize": "^5.22.3", + "sharp": "^0.25.4", + "slugify": "^1.4.7", + "striptags": "^3.1.1" + }, + "devDependencies": { + "nodemon": "^2.0.7", + "sequelize-cli": "^5.5.1" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.0.tgz", + "integrity": "sha512-mEaiD1CURETR/dBIiJAwz0M0Q0mH3gCW4pPMaIlNt97mdzYUVeqGcTJSamgJpS6Tg4tBHDrOJpjdh5fJTLnyNQ==", + "dependencies": { + "detect-libc": "^1.0.3", + "http-proxy-agent": "^4.0.1", + "mkdirp": "^1.0.4", + "node-fetch": "^2.6.1", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "rimraf": "^3.0.2", + "semver": "^7.3.4", + "tar": "^6.1.0" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/babel-types": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.9.tgz", + "integrity": "sha512-qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA==" + }, + "node_modules/@types/babylon": { + "version": "6.16.5", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", + "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", + "dependencies": { + "@types/babel-types": "*" + } + }, + "node_modules/@types/node": { + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", + "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", + "dependencies": { + "acorn": "^4.0.4" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "dependencies": { + "string-width": "^3.0.0" + } + }, + "node_modules/ansi-align/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-align/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-styles/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ansi-styles/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/are-we-there-yet/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bcrypt": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", + "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bl/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/boxen/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "node_modules/busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "dependencies": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dependencies": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/character-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", + "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", + "dependencies": { + "is-regex": "^1.0.3" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-color": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz", + "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.1.1", + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.14", + "timers-ext": "^0.1.5" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cls-bluebird": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cls-bluebird/-/cls-bluebird-2.1.0.tgz", + "integrity": "sha1-N+8eCAqP+1XC9BZPU28ZGeeWiu4=", + "dependencies": { + "is-bluebird": "^1.0.2", + "shimmer": "^1.1.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dependencies": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "node_modules/constantinople": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", + "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", + "dependencies": { + "@types/babel-types": "^7.0.0", + "@types/babylon": "^6.16.2", + "babel-types": "^6.26.0", + "babylon": "^6.18.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3.", + "hasInstallScript": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/date-format": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", + "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/denque": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "dependencies": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/doctypes": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", + "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/dottie": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/editorconfig": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", + "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "dev": true, + "dependencies": { + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" + }, + "bin": { + "editorconfig": "bin/editorconfig" + } + }, + "node_modules/editorconfig/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/editorconfig/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/editorconfig/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.3.0.tgz", + "integrity": "sha512-rgPIqOdfK/4J9FhiVrZ3cveAjRRo5rsQBAIhnylX874y1DX/kEKSVdLsnuHB6l1KTjHyU01VjiMBHgU2adejyg==", + "dev": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/g": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/g/-/g-2.0.1.tgz", + "integrity": "sha1-C1lj69DKcOO8jGdmk0oCGCHIuFc=" + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "dependencies": { + "ini": "1.3.7" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/got/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflection": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", + "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", + "engines": [ + "node >= 0.4.0" + ] + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-bluebird": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz", + "integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", + "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", + "dependencies": { + "acorn": "~4.0.2", + "object-assign": "^4.0.1" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "dependencies": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, + "node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/js-beautify": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.5.tgz", + "integrity": "sha512-MsXlH6Z/BiRYSkSRW3clNDqDjSpiSNOiG8xYVUBXt4k0LnGvDhlTGOlHX1VFtAdoLmtwjxMG5qiWKy/g+Ipv5w==", + "dev": true, + "dependencies": { + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "^1.0.4", + "nopt": "^5.0.0" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "node_modules/log4js": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz", + "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==", + "dependencies": { + "date-format": "^3.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.1", + "rfdc": "^1.1.4", + "streamroller": "^2.2.4" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/log4js/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/log4js/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memoizee": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + } + }, + "node_modules/memoizee/node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dependencies": { + "mime-db": "1.46.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/multer/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mysql2": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.2.5.tgz", + "integrity": "sha512-XRqPNxcZTpmFdXbJqb+/CtYVLCx14x1RTeNMD4954L331APu75IC74GDqnZMEt1kwaXy6TySo55rF2F3YJS78g==", + "dependencies": { + "denque": "^1.4.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.2", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "dependencies": { + "lru-cache": "^4.1.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/named-placeholders/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node_modules/node-abi": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", + "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-addon-api": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", + "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/nodemailer": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.5.0.tgz", + "integrity": "sha512-Tm4RPrrIZbnqDKAvX+/4M+zovEReiKlEXWDzG4iwtpL9X34MJY+D5LnQPH/+eghe8DLlAVshHAJZAZWBGhkguw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemon": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.7.tgz", + "integrity": "sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.2.2", + "debug": "^3.2.6", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.7", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.3", + "update-notifier": "^4.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prebuild-install": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/prebuild-install/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prebuild-install/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prebuild-install/node_modules/simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pug": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", + "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", + "dependencies": { + "pug-code-gen": "^2.0.2", + "pug-filters": "^3.1.1", + "pug-lexer": "^4.1.0", + "pug-linker": "^3.0.6", + "pug-load": "^2.0.12", + "pug-parser": "^5.0.1", + "pug-runtime": "^2.0.5", + "pug-strip-comments": "^1.0.4" + } + }, + "node_modules/pug-attrs": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", + "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", + "dependencies": { + "constantinople": "^3.0.1", + "js-stringify": "^1.0.1", + "pug-runtime": "^2.0.5" + } + }, + "node_modules/pug-code-gen": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.3.tgz", + "integrity": "sha512-r9sezXdDuZJfW9J91TN/2LFbiqDhmltTFmGpHTsGdrNGp3p4SxAjjXEfnuK2e4ywYsRIVP0NeLbSAMHUcaX1EA==", + "dependencies": { + "constantinople": "^3.1.2", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.1", + "pug-attrs": "^2.0.4", + "pug-error": "^1.3.3", + "pug-runtime": "^2.0.5", + "void-elements": "^2.0.1", + "with": "^5.0.0" + } + }, + "node_modules/pug-error": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", + "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==" + }, + "node_modules/pug-filters": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", + "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", + "dependencies": { + "clean-css": "^4.1.11", + "constantinople": "^3.0.1", + "jstransformer": "1.0.0", + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8", + "resolve": "^1.1.6", + "uglify-js": "^2.6.1" + } + }, + "node_modules/pug-lexer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", + "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", + "dependencies": { + "character-parser": "^2.1.1", + "is-expression": "^3.0.0", + "pug-error": "^1.3.3" + } + }, + "node_modules/pug-linker": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", + "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", + "dependencies": { + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8" + } + }, + "node_modules/pug-load": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", + "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", + "dependencies": { + "object-assign": "^4.1.0", + "pug-walk": "^1.1.8" + } + }, + "node_modules/pug-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", + "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", + "dependencies": { + "pug-error": "^1.3.3", + "token-stream": "0.0.1" + } + }, + "node_modules/pug-runtime": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", + "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==" + }, + "node_modules/pug-strip-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", + "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", + "dependencies": { + "pug-error": "^1.3.3" + } + }, + "node_modules/pug-walk": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", + "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry-as-promised": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-3.2.0.tgz", + "integrity": "sha512-CybGs60B7oYU/qSQ6kuaFmRd9sTZ6oXSc0toqePvV74Ac6/IFZSI1ReFQmtCN+uvW1Mtqdwpvt/LGOiCBAY2Mg==", + "dependencies": { + "any-promise": "^1.3.0" + } + }, + "node_modules/rfdc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.2.0.tgz", + "integrity": "sha512-ijLyszTMmUrXvjSooucVQwimGUk84eRcmCuLV8Xghe3UO85mjUtRAHRyoMM6XtyqbECaXuBWx18La3523sXINA==" + }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, + "node_modules/sequelize": { + "version": "5.22.3", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-5.22.3.tgz", + "integrity": "sha512-+nxf4TzdrB+PRmoWhR05TP9ukLAurK7qtKcIFv5Vhxm5Z9v+d2PcTT6Ea3YAoIQVkZ47QlT9XWAIUevMT/3l8Q==", + "dependencies": { + "bluebird": "^3.5.0", + "cls-bluebird": "^2.1.0", + "debug": "^4.1.1", + "dottie": "^2.0.0", + "inflection": "1.12.0", + "lodash": "^4.17.15", + "moment": "^2.24.0", + "moment-timezone": "^0.5.21", + "retry-as-promised": "^3.2.0", + "semver": "^6.3.0", + "sequelize-pool": "^2.3.0", + "toposort-class": "^1.0.1", + "uuid": "^3.3.3", + "validator": "^10.11.0", + "wkx": "^0.4.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/sequelize-cli": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/sequelize-cli/-/sequelize-cli-5.5.1.tgz", + "integrity": "sha512-ZM4kUZvY3y14y+Rq3cYxGH7YDJz11jWHcN2p2x7rhAIemouu4CEXr5ebw30lzTBtyXV4j2kTO+nUjZOqzG7k+Q==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.3", + "cli-color": "^1.4.0", + "fs-extra": "^7.0.1", + "js-beautify": "^1.8.8", + "lodash": "^4.17.5", + "resolve": "^1.5.0", + "umzug": "^2.1.0", + "yargs": "^13.1.0" + }, + "bin": { + "sequelize": "lib/sequelize", + "sequelize-cli": "lib/sequelize" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/sequelize-cli/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/sequelize-cli/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/sequelize-cli/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/sequelize-pool": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-2.3.0.tgz", + "integrity": "sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/sequelize/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sequelize/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/sequelize/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/sharp": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.25.4.tgz", + "integrity": "sha512-umSzJJ1oBwIOfwFFt/fJ7JgCva9FvrEU2cbbm7u/3hSDZhXvkME8WE5qpaJqLIe2Har5msF5UG4CzYlEg5o3BQ==", + "hasInstallScript": true, + "dependencies": { + "color": "^3.1.2", + "detect-libc": "^1.0.3", + "node-addon-api": "^3.0.0", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.4", + "semver": "^7.3.2", + "simple-get": "^4.0.0", + "tar": "^6.0.2", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.0.tgz", + "integrity": "sha512-ZalZGexYr3TA0SwySsr5HlgOOinS4Jsa8YB2GJ6lUNAazyAu4KG/VmzMTwAt2YVXzzVj8QmefmAonZIK2BSGcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/slugify": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", + "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sqlstring": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", + "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", + "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==", + "dependencies": { + "date-format": "^2.1.0", + "debug": "^4.1.1", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/streamroller/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/striptags": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.1.1.tgz", + "integrity": "sha1-yMPn/db7S7OjKjt1LltePjgJPr0=" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar-stream/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/tar-stream/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/timers-ext": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", + "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "dev": true, + "dependencies": { + "es5-ext": "~0.10.46", + "next-tick": "1" + } + }, + "node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-stream": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", + "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" + }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/touch/node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dependencies": { + "source-map": "~0.5.1", + "yargs": "~3.10.0" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + }, + "optionalDependencies": { + "uglify-to-browserify": "~1.0.0" + } + }, + "node_modules/uglify-js/node_modules/camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uglify-js/node_modules/cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dependencies": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uglify-js/node_modules/yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dependencies": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + }, + "node_modules/uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, + "node_modules/umzug": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.3.0.tgz", + "integrity": "sha512-Z274K+e8goZK8QJxmbRPhl89HPO1K+ORFtm6rySPhFKfKc5GHhqdzD0SGhSWHkzoXasqJuItdhorSvY7/Cgflw==", + "dev": true, + "dependencies": { + "bluebird": "^3.7.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", + "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", + "dev": true, + "dependencies": { + "debug": "^2.2.0" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dev": true, + "dependencies": { + "boxen": "^4.2.0", + "chalk": "^3.0.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.1", + "is-npm": "^4.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.0.0", + "pupa": "^2.0.1", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validator": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", + "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/widest-line/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/with": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", + "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", + "dependencies": { + "acorn": "^3.1.0", + "acorn-globals": "^3.0.0" + } + }, + "node_modules/with/node_modules/acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wkx": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.4.8.tgz", + "integrity": "sha512-ikPXMM9IR/gy/LwiOSqWlSL3X/J5uk9EO2hHNRXS41eTLXaUFEVw9fn/593jW/tE5tedNg8YjT5HkCa4FqQZyQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + } + }, "dependencies": { + "@mapbox/node-pre-gyp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.0.tgz", + "integrity": "sha512-mEaiD1CURETR/dBIiJAwz0M0Q0mH3gCW4pPMaIlNt97mdzYUVeqGcTJSamgJpS6Tg4tBHDrOJpjdh5fJTLnyNQ==", + "requires": { + "detect-libc": "^1.0.3", + "http-proxy-agent": "^4.0.1", + "mkdirp": "^1.0.4", + "node-fetch": "^2.6.1", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "rimraf": "^3.0.2", + "semver": "^7.3.4", + "tar": "^6.1.0" + } + }, "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", @@ -19,10 +4694,15 @@ "defer-to-connect": "^1.0.1" } }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + }, "@types/babel-types": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz", - "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ==" + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.9.tgz", + "integrity": "sha512-qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA==" }, "@types/babylon": { "version": "6.16.5", @@ -33,9 +4713,9 @@ } }, "@types/node": { - "version": "14.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", - "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==" + "version": "14.14.31", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", + "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==" }, "abbrev": { "version": "1.1.1", @@ -52,9 +4732,9 @@ } }, "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" }, "acorn-globals": { "version": "3.1.0", @@ -62,12 +4742,28 @@ "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", "requires": { "acorn": "^4.0.4" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" }, "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -88,6 +4784,40 @@ "dev": true, "requires": { "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "ansi-regex": { @@ -96,12 +4826,29 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "any-promise": { @@ -136,6 +4883,35 @@ "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "array-flatten": { @@ -184,17 +4960,17 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "bcrypt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.0.tgz", - "integrity": "sha512-jB0yCBl4W/kVHM2whjfyqnxTmOHkCX4kHEa5nYKSoGeYe8YrjTYTc87/6bwt1g8cmV0QrbhKriETg9jWtcREhg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", + "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", "requires": { - "node-addon-api": "^3.0.0", - "node-pre-gyp": "0.15.0" + "@mapbox/node-pre-gyp": "^1.0.0", + "node-addon-api": "^3.1.0" } }, "binary-extensions": { @@ -204,9 +4980,9 @@ "dev": true }, "bl": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz", - "integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "requires": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -227,6 +5003,19 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } } } }, @@ -287,9 +5076,9 @@ "dev": true }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -327,12 +5116,12 @@ } }, "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, "buffer-equal-constant-time": { @@ -352,29 +5141,6 @@ "requires": { "dicer": "0.2.5", "readable-stream": "1.1.x" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } } }, "bytes": { @@ -414,6 +5180,15 @@ } } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", @@ -439,30 +5214,6 @@ "supports-color": "^7.1.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -510,9 +5261,9 @@ } }, "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "ci-info": { "version": "2.0.0", @@ -557,6 +5308,40 @@ "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "clone-response": { @@ -566,6 +5351,14 @@ "dev": true, "requires": { "mimic-response": "^1.0.0" + }, + "dependencies": { + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + } } }, "cls-bluebird": { @@ -583,12 +5376,12 @@ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", "requires": { "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-string": "^1.5.4" } }, "color-convert": { @@ -605,9 +5398,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -633,6 +5426,35 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "config-chain": { @@ -699,9 +5521,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" }, "core-util-is": { "version": "1.0.2", @@ -748,12 +5570,11 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "requires": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" } }, "deep-extend": { @@ -773,9 +5594,9 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "denque": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz", - "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", + "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" }, "depd": { "version": "1.1.2", @@ -799,29 +5620,6 @@ "requires": { "readable-stream": "1.1.x", "streamsearch": "0.1.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } } }, "doctypes": { @@ -1049,9 +5847,9 @@ }, "dependencies": { "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.3.0.tgz", + "integrity": "sha512-rgPIqOdfK/4J9FhiVrZ3cveAjRRo5rsQBAIhnylX874y1DX/kEKSVdLsnuHB6l1KTjHyU01VjiMBHgU2adejyg==", "dev": true } } @@ -1120,11 +5918,11 @@ } }, "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { - "minipass": "^2.6.0" + "minipass": "^3.0.0" } }, "fs.realpath": { @@ -1133,9 +5931,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -1162,34 +5960,6 @@ "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - } } }, "generate-function": { @@ -1206,6 +5976,16 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -1276,12 +6056,29 @@ "p-cancelable": "^1.0.0", "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + } } }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" }, "has": { "version": "1.0.3", @@ -1297,6 +6094,11 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -1326,6 +6128,31 @@ "toidentifier": "1.0.0" } }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -1335,9 +6162,9 @@ } }, "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore-by-default": { "version": "1.0.1", @@ -1345,14 +6172,6 @@ "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", "dev": true }, - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "requires": { - "minimatch": "^3.0.4" - } - }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", @@ -1427,6 +6246,14 @@ "ci-info": "^2.0.0" } }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "requires": { + "has": "^1.0.3" + } + }, "is-expression": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", @@ -1434,13 +6261,6 @@ "requires": { "acorn": "~4.0.2", "object-assign": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", - "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" - } } }, "is-extglob": { @@ -1450,9 +6270,12 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "^1.0.0" + } }, "is-glob": { "version": "4.0.1", @@ -1498,9 +6321,9 @@ "dev": true }, "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-property": { "version": "1.0.2", @@ -1508,11 +6331,12 @@ "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" }, "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", "requires": { - "has": "^1.0.3" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" } }, "is-typedarray": { @@ -1528,21 +6352,21 @@ "dev": true }, "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "js-beautify": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.10.3.tgz", - "integrity": "sha512-wfk/IAWobz1TfApSdivH5PJ0miIHgDoYb1ugSqHcODPmaYu46rYe5FVuIEkhjg8IQiv6rDNPyhsqbsohI/C2vQ==", + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.13.5.tgz", + "integrity": "sha512-MsXlH6Z/BiRYSkSRW3clNDqDjSpiSNOiG8xYVUBXt4k0LnGvDhlTGOlHX1VFtAdoLmtwjxMG5qiWKy/g+Ipv5w==", "dev": true, "requires": { "config-chain": "^1.1.12", "editorconfig": "^0.15.3", "glob": "^7.1.3", - "mkdirp": "~0.5.1", - "nopt": "~4.0.1" + "mkdirp": "^1.0.4", + "nopt": "^5.0.0" } }, "js-stringify": { @@ -1583,9 +6407,9 @@ }, "dependencies": { "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "semver": { "version": "5.7.1", @@ -1664,9 +6488,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.includes": { "version": "4.3.0", @@ -1716,11 +6540,11 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { @@ -1752,13 +6576,6 @@ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "requires": { "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "lru-queue": { @@ -1777,6 +6594,14 @@ "dev": true, "requires": { "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "md5": { @@ -1795,19 +6620,27 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.15.tgz", + "integrity": "sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", + "d": "^1.0.1", + "es5-ext": "^0.10.53", + "es6-weak-map": "^2.0.3", "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + }, + "dependencies": { + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + } } }, "merge-descriptors": { @@ -1826,23 +6659,22 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", - "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==" + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" }, "mime-types": { - "version": "2.1.26", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", - "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", "requires": { - "mime-db": "1.43.0" + "mime-db": "1.46.0" } }, "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" }, "minimatch": { "version": "3.0.4", @@ -1858,29 +6690,26 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "yallist": "^4.0.0" } }, "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "requires": { - "minipass": "^2.9.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" } }, "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "requires": { - "minimist": "^1.2.5" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "mkdirp-classic": { "version": "0.5.3", @@ -1888,14 +6717,14 @@ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "moment": { - "version": "2.27.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", - "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" }, "moment-timezone": { - "version": "0.5.31", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.31.tgz", - "integrity": "sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA==", + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", + "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", "requires": { "moment": ">= 2.9.0" } @@ -1918,6 +6747,16 @@ "on-finished": "^2.3.0", "type-is": "^1.6.4", "xtend": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + } } }, "mysql2": { @@ -1974,31 +6813,6 @@ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, - "needle": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", - "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -2011,9 +6825,9 @@ "dev": true }, "node-abi": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.18.0.tgz", - "integrity": "sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw==", + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz", + "integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==", "requires": { "semver": "^5.4.1" }, @@ -2026,38 +6840,19 @@ } }, "node-addon-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz", - "integrity": "sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.1.0.tgz", + "integrity": "sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw==" }, - "node-pre-gyp": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz", - "integrity": "sha512-7QcZa8/fpaU/BKenjcaeFF9hLz2+7S9AqyXFhlH/rilsQ/hPZKK32RtR5EQHJElgu+q5RfbJ34KriI79UWaorA==", - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.3", - "needle": "^2.5.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" }, "nodemailer": { - "version": "6.4.17", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.4.17.tgz", - "integrity": "sha512-89ps+SBGpo0D4Bi5ZrxcrCiRFaMmkCt+gItMXQGzEtZVR3uAD3QAQIDoxTWnx3ky0Dwwy/dhFrQ+6NNGXpw/qQ==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.5.0.tgz", + "integrity": "sha512-Tm4RPrrIZbnqDKAvX+/4M+zovEReiKlEXWDzG4iwtpL9X34MJY+D5LnQPH/+eghe8DLlAVshHAJZAZWBGhkguw==" }, "nodemon": { "version": "2.0.7", @@ -2106,12 +6901,11 @@ "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" } }, "normalize-path": { @@ -2126,29 +6920,6 @@ "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", "dev": true }, - "npm-bundled": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", - "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -2186,25 +6957,6 @@ "wrappy": "1" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -2212,9 +6964,9 @@ "dev": true }, "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -2245,6 +6997,14 @@ "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "parseurl": { @@ -2280,15 +7040,15 @@ "dev": true }, "prebuild-install": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.5.tgz", - "integrity": "sha512-YmMO7dph9CYKi5IR/BzjOJlRzpxGGVo1EsLSUZ0mt/Mq0HWZIHOKHHcHdT69yG54C9m6i45GpItwRHpk0Py7Uw==", + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", "requires": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", - "mkdirp": "^0.5.1", + "mkdirp-classic": "^0.5.3", "napi-build-utils": "^1.0.1", "node-abi": "^2.7.0", "noop-logger": "^0.1.1", @@ -2397,9 +7157,9 @@ } }, "pug-code-gen": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz", - "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.3.tgz", + "integrity": "sha512-r9sezXdDuZJfW9J91TN/2LFbiqDhmltTFmGpHTsGdrNGp3p4SxAjjXEfnuK2e4ywYsRIVP0NeLbSAMHUcaX1EA==", "requires": { "constantinople": "^3.1.2", "doctypes": "^1.1.0", @@ -2536,17 +7296,14 @@ } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "requires": { "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, "readdirp": { @@ -2599,10 +7356,11 @@ "dev": true }, "resolve": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", - "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -2624,9 +7382,9 @@ } }, "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.2.0.tgz", + "integrity": "sha512-ijLyszTMmUrXvjSooucVQwimGUk84eRcmCuLV8Xghe3UO85mjUtRAHRyoMM6XtyqbECaXuBWx18La3523sXINA==" }, "right-align": { "version": "0.1.3", @@ -2637,9 +7395,9 @@ } }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { "glob": "^7.1.3" } @@ -2654,15 +7412,13 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-diff": { "version": "3.1.1", @@ -2671,6 +7427,14 @@ "dev": true, "requires": { "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "send": { @@ -2728,17 +7492,22 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -2826,71 +7595,6 @@ "simple-get": "^4.0.0", "tar": "^6.0.2", "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "node-addon-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.0.tgz", - "integrity": "sha512-sSHCgWfJ+Lui/u+0msF3oyCgvdkhxDbkCS6Q8uiJquzOimkJBvX6hl5aSSA7DR1XbMpdM8r7phjcF63sF4rkKg==" - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==" - }, - "tar": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.2.tgz", - "integrity": "sha512-Glo3jkRtPcvpDlAs/0+hozav78yoXKFr+c4wgw62NNMO3oo4AaJdCo21Uu7lcwr55h39W2XD1LMERc64wtbItg==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.0", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } } }, "shimmer": { @@ -2910,9 +7614,9 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" }, "simple-get": { "version": "4.0.0", @@ -2922,21 +7626,6 @@ "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - } } }, "simple-swizzle": { @@ -2948,9 +7637,9 @@ } }, "slugify": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.6.tgz", - "integrity": "sha512-ZdJIgv9gdrYwhXqxsH9pv7nXxjUEyQ6nqhngRxoAAOlmMGA28FDq5O4/5US4G2/Nod7d1ovNcgURQJ7kHq50KQ==" + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.4.7.tgz", + "integrity": "sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==" }, "source-map": { "version": "0.6.1", @@ -2983,11 +7672,11 @@ "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } }, "fs-extra": { @@ -3025,40 +7714,27 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "safe-buffer": "~5.1.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3081,36 +7757,42 @@ } }, "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" } }, "tar-fs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.0.tgz", - "integrity": "sha512-9uW5iDvrIMCVpvasdFHW0wJPez0K4JnMZtsuIeDI7HyMGJNxmDZDOCQROr7lXyS+iL/QMpj07qcjGYTSdRFXUg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", "requires": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", - "tar-stream": "^2.0.0" + "tar-stream": "^2.1.4" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + } } }, "tar-stream": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", - "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "requires": { - "bl": "^4.0.1", + "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", @@ -3126,6 +7808,19 @@ "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } } } }, @@ -3406,30 +8101,6 @@ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "requires": { "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, "widest-line": { @@ -3460,9 +8131,9 @@ "dev": true }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "requires": { "emoji-regex": "^8.0.0", @@ -3493,6 +8164,13 @@ "requires": { "acorn": "^3.1.0", "acorn-globals": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + } } }, "wkx": { @@ -3517,6 +8195,49 @@ "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "wrappy": { @@ -3548,15 +8269,15 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { "version": "13.3.2", @@ -3574,6 +8295,40 @@ "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "yargs-parser": { diff --git a/package.json b/package.json index 470758b..03d5f53 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "author": "Fabrice PENHOËT", "license": "GPL-3.0-or-later", "dependencies": { - "bcrypt": "^5.0.0", + "bcrypt": "^5.0.1", "body-parser": "^1.19.0", "dotenv": "^8.2.0", "express": "^4.17.1", @@ -30,11 +30,11 @@ "md5": "^2.3.0", "multer": "^1.4.2", "mysql2": "^2.2.5", - "nodemailer": "^6.4.17", + "nodemailer": "^6.5.0", "pug": "^2.0.4", "sequelize": "^5.22.3", "sharp": "^0.25.4", - "slugify": "^1.4.6", + "slugify": "^1.4.7", "striptags": "^3.1.1" }, "devDependencies": {